admin - 2008-6-17 9:22:00
在silverlight开发,允许我们获取指定URL压缩包(zip)并读取其中的图片文件。而实现这个功能也TÕ^¡.gwww.netcsharp.cnõªPßxѧ
非常简单。下面是运行效果图:TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
首先,我们需要建立一个silverligth application ,名称为:DownLoadImg.TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
下面就是相应的page.xaml代码: TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧTÕ^¡.gwww.netcsharp.cnõªPßxѧ
<Grid x:Name="LayoutRoot" Background="White">TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<Grid.RowDefinitions>TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<RowDefinition Height="250" />TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<RowDefinition Height="100" />TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<RowDefinition Height="50" />TÕ^¡.gwww.netcsharp.cnõªPßxѧ
</Grid.RowDefinitions>TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<StackPanel Grid.Row="1">TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<ListBox x:Name="ImageList"/>TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<Button x:Name="Download" Click="StartDownLoad" Content="下载该图片"/>TÕ^¡.gwww.netcsharp.cnõªPßxѧ
</StackPanel>TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<StackPanel Grid.Row="0"> TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<ScrollViewer HorizontalScrollBarVisibility="Auto" >TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<Image x:Name="ImgToFill" > TÕ^¡.gwww.netcsharp.cnõªPßxѧ
</Image>TÕ^¡.gwww.netcsharp.cnõªPßxѧ
</ScrollViewer>TÕ^¡.gwww.netcsharp.cnõªPßxѧ
</StackPanel>TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<StackPanel Grid.Row="2">TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<Canvas Canvas.Top="70" >TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<Rectangle Name="progressRectangle" Height="10" Width="0" Fill="AliceBlue" />TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<Rectangle Height="12" Width="202" StrokeThickness="1" Stroke="Black" />TÕ^¡.gwww.netcsharp.cnõªPßxѧ
<TextBlock x:Name="progressText" Canvas.Left="210" Text="0%" FontSize="12" />TÕ^¡.gwww.netcsharp.cnõªPßxѧ
</Canvas>TÕ^¡.gwww.netcsharp.cnõªPßxѧ
</StackPanel>TÕ^¡.gwww.netcsharp.cnõªPßxѧ
</Grid>TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
接下来是page.xaml.cs(相关内容见注释):TÕ^¡.gwww.netcsharp.cnõªPßxѧusing System;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Collections.Generic;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Linq;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Net;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Windows;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Windows.Controls;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Windows.Documents;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Windows.Input;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Windows.Media;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Windows.Media.Animation;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Windows.Shapes;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.IO;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Windows.Resources;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
using System.Windows.Media.Imaging;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
namespace DownLoadImgTÕ^¡.gwww.netcsharp.cnõªPßxѧ
{TÕ^¡.gwww.netcsharp.cnõªPßxѧ
public partial class Page : UserControlTÕ^¡.gwww.netcsharp.cnõªPßxѧ
{TÕ^¡.gwww.netcsharp.cnõªPßxѧ
WebClient wc = new WebClient();TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
public Page()TÕ^¡.gwww.netcsharp.cnõªPßxѧ
{TÕ^¡.gwww.netcsharp.cnõªPßxѧ
InitializeComponent();TÕ^¡.gwww.netcsharp.cnõªPßxѧ
this.Loaded += new RoutedEventHandler(Page_Loaded);TÕ^¡.gwww.netcsharp.cnõªPßxѧ
}TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
//加载图片列表数据TÕ^¡.gwww.netcsharp.cnõªPßxѧ
void Page_Loaded(object sender, RoutedEventArgs e)TÕ^¡.gwww.netcsharp.cnõªPßxѧ
{TÕ^¡.gwww.netcsharp.cnõªPßxѧ
ImageList.Items.Add("1.jpg");TÕ^¡.gwww.netcsharp.cnõªPßxѧ
ImageList.Items.Add("2.png");TÕ^¡.gwww.netcsharp.cnõªPßxѧ
}TÕ^¡.gwww.netcsharp.cnõªPßxѧ
//实例化下载设置TÕ^¡.gwww.netcsharp.cnõªPßxѧ
void StartDownLoad(object o, EventArgs e)TÕ^¡.gwww.netcsharp.cnõªPßxѧ
{TÕ^¡.gwww.netcsharp.cnõªPßxѧ
//初始化相应控件信息TÕ^¡.gwww.netcsharp.cnõªPßxѧ
ImgToFill.Visibility = Visibility.Collapsed;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
progressRectangle.Width = 0;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
progressText.Text = "0%";TÕ^¡.gwww.netcsharp.cnõªPßxѧ
//绑定下载过程中处理的事件TÕ^¡.gwww.netcsharp.cnõªPßxѧ
wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted);TÕ^¡.gwww.netcsharp.cnõªPßxѧ
wc.DownloadProgressChanged += new DownloadProgressChangedEventHandler(wc_DownloadProgressChanged);TÕ^¡.gwww.netcsharp.cnõªPßxѧ
//开始异步读取压缩包中的文件信息TÕ^¡.gwww.netcsharp.cnõªPßxѧ
wc.OpenReadAsync(new Uri("img.zip", UriKind.Relative), ImageList.SelectedItem);TÕ^¡.gwww.netcsharp.cnõªPßxѧ
}TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)TÕ^¡.gwww.netcsharp.cnõªPßxѧ
{TÕ^¡.gwww.netcsharp.cnõªPßxѧ
//实例化流资源信息,准备获取其中的图片数据TÕ^¡.gwww.netcsharp.cnõªPßxѧ
StreamResourceInfo sri = new StreamResourceInfo(e.Result as Stream, null);TÕ^¡.gwww.netcsharp.cnõªPßxѧ
//要读取的图片路径信息TÕ^¡.gwww.netcsharp.cnõªPßxѧ
String sURI = e.UserState as String;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
//从流资源中获取指定的URL图片流信息TÕ^¡.gwww.netcsharp.cnõªPßxѧ
StreamResourceInfo imageStream = Application.GetResourceStream(sri, new Uri(sURI, UriKind.Relative));TÕ^¡.gwww.netcsharp.cnõªPßxѧ
BitmapImage imgsrc = new BitmapImage();TÕ^¡.gwww.netcsharp.cnõªPßxѧ
//绑定该URL图片信息并进行显示TÕ^¡.gwww.netcsharp.cnõªPßxѧ
imgsrc.SetSource(imageStream.Stream);TÕ^¡.gwww.netcsharp.cnõªPßxѧ
ImgToFill.Source = imgsrc;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
ImgToFill.Visibility = Visibility.Visible;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
ImgToFill.Stretch = Stretch.Fill;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
}TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
void wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)TÕ^¡.gwww.netcsharp.cnõªPßxѧ
{TÕ^¡.gwww.netcsharp.cnõªPßxѧ
//下载过程中的进度显示TÕ^¡.gwww.netcsharp.cnõªPßxѧ
progressText.Text = e.ProgressPercentage.ToString() + "%";TÕ^¡.gwww.netcsharp.cnõªPßxѧ
progressRectangle.Width = (double)e.ProgressPercentage * 2;TÕ^¡.gwww.netcsharp.cnõªPßxѧ
}TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
}TÕ^¡.gwww.netcsharp.cnõªPßxѧ
}TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ
TÕ^¡.gwww.netcsharp.cnõªPßxѧ附件:
silverlight_downloadimg.rar