稳扎稳打Silverlight(20) - 2.0通信之WebClient, 以字符串的形式上传/下载数据, 以流的方式上传/下载数据

简介:
[索引页]
[源码下载]


稳扎稳打Silverlight(20) - 2.0通信之WebClient, 以字符串的形式上传/下载数据, 以流的方式上传/下载数据


作者: webabcd


介绍
Silverlight 2.0 详解WebClient,以字符串的形式上传、下载数据;以流的方式上传、下载数据
    WebClient - 将数据发送到指定的 URI,或者从指定的 URI 接收数据的类
        DownloadStringAsync(Uri address, Object userToken) - 以字符串的形式下载指定的 URI 的资源
        UploadStringAsync(Uri address, string data) - 以字符串的形式上传数据到指定的 URI。所使用的 HTTP 方法默认为 POST
        OpenReadAsync(Uri address, Object userToken) - 以流的形式下载指定的 URI 的资源
        OpenWriteAsync(Uri address, string method, Object userToken) - 打开流以使用指定的方法向指定的 URI 写入数据


在线DEMO
http://webabcd.blog.51cto.com/1787395/342779  


示例
1、以字符串的形式和流的形式下载数据
WebClientDownload.xaml
<UserControl x:Class="Silverlight20.Communication.WebClientDownload" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
        <StackPanel HorizontalAlignment="Left" Orientation="Horizontal"> 
         
                <StackPanel Margin="5" Width="200"> 
                        <TextBox x:Name="lblMsgString" Margin="5" /> 
                        <ProgressBar x:Name="progressBarString" Height="20" Margin="5" Minimum="0" Maximum="100" /> 
                </StackPanel> 
                 
                <StackPanel Margin="5" Width="200"> 
                        <TextBox x:Name="lblMsgStream" Margin="5" /> 
                        <ProgressBar x:Name="progressBarStream" Height="20" Margin="5" Minimum="0" Maximum="100" /> 
                        <Image x:Name="img" Margin="5" /> 
                </StackPanel> 
                 
        </StackPanel> 
</UserControl>
 
WebClientDownload.xaml.cs
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Linq; 
InBlock.gif using System.Net; 
InBlock.gif using System.Windows; 
InBlock.gif using System.Windows.Controls; 
InBlock.gif using System.Windows.Documents; 
InBlock.gif using System.Windows.Input; 
InBlock.gif using System.Windows.Media; 
InBlock.gif using System.Windows.Media.Animation; 
InBlock.gif using System.Windows.Shapes; 
InBlock.gif 
InBlock.gif using System.IO; 
InBlock.gif 
InBlock.gif namespace Silverlight20.Communication 
InBlock.gif
InBlock.gif         public partial  class WebClientDownload : UserControl 
InBlock.gif        { 
InBlock.gif                 // 用于演示以字符串的形式下载数据 
InBlock.gif                 string _urlString =  "http://localhost/Files/Demo.zip"; 
InBlock.gif 
InBlock.gif                // 用于演示以流的形式下载数据 
InBlock.gif                string _urlStream = "http://localhost/Files/Logo.png"; 
InBlock.gif 
InBlock.gif                public WebClientDownload() 
InBlock.gif                { 
InBlock.gif                        InitializeComponent(); 
InBlock.gif 
InBlock.gif                        // 演示字符串式下载 
InBlock.gif                        DownloadStringDemo(); 
InBlock.gif 
InBlock.gif                        // 演示流式下载 
InBlock.gif                        DownloadStreamDemo(); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                /// <summary> 
InBlock.gif                /// 演示字符串式下载 
InBlock.gif                /// </summary> 
InBlock.gif                void DownloadStringDemo() 
InBlock.gif                { 
InBlock.gif                        Uri uri = new Uri(_urlString, UriKind.Absolute); 
InBlock.gif 
InBlock.gif                        /*    
InBlock.gif                         * WebClient - 将数据发送到指定的 URI,或者从指定的 URI 接收数据的类 
InBlock.gif                         *         DownloadStringCompleted - 下载数据完毕后(包括取消操作及有错误发生时)所触发的事件
InBlock.gif                         *         DownloadProgressChanged - 下载数据过程中所触发的事件。正在下载或下载完全部数据后会触发 
InBlock.gif                         *         DownloadStringAsync(Uri address, Object userToken) - 以字符串的形式下载指定的 URI 的资源 
InBlock.gif                         *                 Uri address - 需要下载的资源地址 
InBlock.gif                         *                 Object userToken - 用户标识 
InBlock.gif                         */
 
InBlock.gif 
InBlock.gif                        System.Net.WebClient clientDownloadString = new System.Net.WebClient(); 
InBlock.gif 
InBlock.gif                        clientDownloadString.DownloadStringCompleted += new DownloadStringCompletedEventHandler(clientDownloadString_DownloadStringCompleted); 
InBlock.gif                        clientDownloadString.DownloadProgressChanged += new DownloadProgressChangedEventHandler(clientDownloadString_DownloadProgressChanged); 
InBlock.gif                        clientDownloadString.DownloadStringAsync(uri, "userToken"); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                void clientDownloadString_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
InBlock.gif                { 
InBlock.gif                        /* 
InBlock.gif                         * DownloadProgressChangedEventArgs.ProgressPercentage - 下载完成的百分比 
InBlock.gif                         * DownloadProgressChangedEventArgs.BytesReceived - 当前收到的字节数 
InBlock.gif                         * DownloadProgressChangedEventArgs.TotalBytesToReceive - 总共需要下载的字节数 
InBlock.gif                         * DownloadProgressChangedEventArgs.UserState - 用户标识 
InBlock.gif                         */
 
InBlock.gif 
InBlock.gif                        lblMsgString.Text = string.Format("下载完成的百分比:{0}\r\n当前收到的字节数:{1}\r\n总共需要下载的字节数:{2}\r\n"
InBlock.gif                                e.ProgressPercentage.ToString() + "%"
InBlock.gif                                e.BytesReceived.ToString(), 
InBlock.gif                                e.TotalBytesToReceive.ToString()); 
InBlock.gif 
InBlock.gif                        progressBarString.Value = (double)e.ProgressPercentage; 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                void clientDownloadString_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
InBlock.gif                { 
InBlock.gif                        /* 
InBlock.gif                         * DownloadStringCompletedEventArgs.Error - 该异步操作期间是否发生了错误 
InBlock.gif                         * DownloadStringCompletedEventArgs.Cancelled - 该异步操作是否已被取消 
InBlock.gif                         * DownloadStringCompletedEventArgs.Result - 下载后的字符串类型的数据 
InBlock.gif                         * DownloadStringCompletedEventArgs.UserState - 用户标识 
InBlock.gif                         */
 
InBlock.gif 
InBlock.gif                        if (e.Error != null
InBlock.gif                        { 
InBlock.gif                                lblMsgString.Text += e.Error.ToString(); 
InBlock.gif                                return
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                        if (e.Cancelled != true
InBlock.gif                        { 
InBlock.gif                                lblMsgString.Text += string.Format("用户标识:{0}", e.UserState.ToString()); 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif 
InBlock.gif 
InBlock.gif                /// <summary> 
InBlock.gif                /// 演示流式下载 
InBlock.gif                /// </summary> 
InBlock.gif                void DownloadStreamDemo() 
InBlock.gif                { 
InBlock.gif                        Uri uri = new Uri(_urlStream, UriKind.Absolute); 
InBlock.gif 
InBlock.gif                        /*    
InBlock.gif                         * WebClient - 将数据发送到指定的 URI,或者从指定的 URI 接收数据的类 
InBlock.gif                         *         IsBusy - 指定的web请求是否正在进行中 
InBlock.gif                         *         CancelAsync() - 取消指定的异步操作    
InBlock.gif                         *         OpenReadCompleted - 数据读取完毕后(包括取消操作及有错误发生时)所触发的事件。流的方式 
InBlock.gif                         *         DownloadProgressChanged - 下载数据过程中所触发的事件。正在下载或下载完全部数据后会触发 
InBlock.gif                         *         OpenReadAsync(Uri address, Object userToken) - 以流的形式下载指定的 URI 的资源 
InBlock.gif                         *                 Uri address - 需要下载的资源地址 
InBlock.gif                         *                 Object userToken - 用户标识 
InBlock.gif                         */
 
InBlock.gif 
InBlock.gif                        System.Net.WebClient clientDownloadStream = new System.Net.WebClient(); 
InBlock.gif 
InBlock.gif                        if (clientDownloadStream.IsBusy) 
InBlock.gif                                clientDownloadStream.CancelAsync(); 
InBlock.gif 
InBlock.gif                        clientDownloadStream.OpenReadCompleted += new OpenReadCompletedEventHandler(clientDownloadStream_OpenReadCompleted); 
InBlock.gif                        clientDownloadStream.DownloadProgressChanged += new DownloadProgressChangedEventHandler(clientDownloadStream_DownloadProgressChanged); 
InBlock.gif                        clientDownloadStream.OpenReadAsync(uri); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                void clientDownloadStream_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e) 
InBlock.gif                { 
InBlock.gif                        /* 
InBlock.gif                         * DownloadProgressChangedEventArgs.ProgressPercentage - 下载完成的百分比 
InBlock.gif                         * DownloadProgressChangedEventArgs.BytesReceived - 当前收到的字节数 
InBlock.gif                         * DownloadProgressChangedEventArgs.TotalBytesToReceive - 总共需要下载的字节数 
InBlock.gif                         * DownloadProgressChangedEventArgs.UserState - 用户标识 
InBlock.gif                         */
 
InBlock.gif 
InBlock.gif                        lblMsgString.Text = string.Format("下载完成的百分比:{0}\r\n当前收到的字节数:{1}\r\n总共需要下载的字节数:{2}\r\n"
InBlock.gif                                e.ProgressPercentage.ToString() + "%"
InBlock.gif                                e.BytesReceived.ToString(), 
InBlock.gif                                e.TotalBytesToReceive.ToString()); 
InBlock.gif 
InBlock.gif                        progressBarStream.Value = (double)e.ProgressPercentage; 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                void clientDownloadStream_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
InBlock.gif                { 
InBlock.gif                        /* 
InBlock.gif                         * OpenReadCompletedEventArgs.Error - 该异步操作期间是否发生了错误 
InBlock.gif                         * OpenReadCompletedEventArgs.Cancelled - 该异步操作是否已被取消 
InBlock.gif                         * OpenReadCompletedEventArgs.Result - 下载后的 Stream 类型的数据 
InBlock.gif                         * OpenReadCompletedEventArgs.UserState - 用户标识 
InBlock.gif                         */
 
InBlock.gif 
InBlock.gif                        if (e.Error != null
InBlock.gif                        { 
InBlock.gif                                lblMsgStream.Text += e.Error.ToString(); 
InBlock.gif                                return
InBlock.gif                        } 
InBlock.gif 
InBlock.gif                        if (e.Cancelled != true
InBlock.gif                        { 
InBlock.gif                                System.Windows.Media.Imaging.BitmapImage imageSource = new System.Windows.Media.Imaging.BitmapImage(); 
InBlock.gif                                imageSource.SetSource(e.Result); 
InBlock.gif                                img.Source = imageSource; 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif        } 
InBlock.gif}
 
 
 
 
 




     本文转自webabcd 51CTO博客,原文链接: http://blog.51cto.com/webabcd/343127 ,如需转载请自行联系原作者
相关文章