使用silverlight3 实现文件下载 Webclient(WebService)

silverlight3 MainPage.xaml如下:
<UserControl x:Class="SilverlightApplication2.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480" >
    <Grid x:Name="LayoutRoot">
        <Button Content="下载文件" Height=" 20" Width=" 100" Click="Button_Click" ></Button>
        <ProgressBar x:Name="progressbar1" Width="300" Height="10" Margin="0,70,20,20"></ProgressBar>
        <TextBlock x:Name="txtinfo" Text=" ss"  Margin="0,150,20,20" Width=" 300" Height=" 50"/>
    </Grid>
</UserControl>



MainPage.xaml.cs如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.IO;


namespace SilverlightApplication2
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            //_file 要下载的文件路径
            string _file = "http://localhost:1490/aa.rar"; //这里改成你网站里的文件路径
            SaveFileDialog sf = new SaveFileDialog();
            if (sf.ShowDialog() != true) return;
            Stream  clientStream = sf.OpenFile();
            Uri _uri = new Uri(_file, UriKind.Absolute);
            WebClient client = new WebClient();
            if (client.IsBusy)
            {
                client.CancelAsync();
            }
            client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
            client.OpenReadCompleted += new OpenReadCompletedEventHandler(client_OpenReadCompleted);
  
            client.OpenReadAsync(_uri, clientStream);
            
        }


        void client_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                txtinfo.Text += e.Error.Message;
                return;
            }
            if (e.Cancelled != true)
            {
                Stream clientStream = e.UserState as Stream;
                Stream serverStream = (Stream)e.Result;
                byte[] buffer = new byte[serverStream.Length];
                serverStream.Read(buffer, 0, buffer.Length);
                clientStream.Write(buffer, 0,buffer.Length);
                clientStream.Close();
                serverStream.Close();
            }
        }

        void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            progressbar1.Value =(double) e.ProgressPercentage;
            txtinfo.Text = string.Format("完成的百分比:{0}\r\n已下载的字节数:{1}\r\n数要载的总字节数:{2}\r\n",
                                   e.ProgressPercentage.ToString(),
                                   e.BytesReceived.ToString(),
                                   e.TotalBytesToReceive.ToString());
        }

    }
}
posted @ 2011-03-02 15:01  infi  阅读(305)  评论(0编辑  收藏  举报