您的位置:首页 > 理论基础 > 计算机网络

wp7,webClient&httpWebRequest&BitmapImage

2012-02-02 13:58 429 查看
不管是windows mobile还是windows phone7,对于连网问题都比较迷茫,现在也似乎似懂非懂,大致会使用一些简单的操作基本如下载xml、图片和上传xml、压缩包等。

1)webClient&httpWebRequest。

看了很多网上资料,发现webClient&httpWebRequest的使用区别大同小异,见参考一http://book.51cto.com/art/200905/124208.htm

HttpWebRequest使用基于代理的异步编程模型,而WebClient使用基于事件的异步编程模型,基于事件的模型更容易使用。

在HTTP响应返回时引发的WebClient回调是在UI线程中调用的,因此可用于更新UI元素的属性,例如可用于显示HTTP响应中的数据;而HttpWebRequest回调不是在UI线程上返回的,因此在该回调中需要额外代码处理UI。这使得WebClient更适合于须要更新UI的应用程序。

后来自己使用的时候也没有发现多少大的区别,基本上是webClient已经封装好“请求和响应”,而httpWebRequest需要自己操作“请求和响应”。一般简单的连网问题,选择webClient比较简单方便。

webClient的基于事件的异步编程模型,可以帮助只需要使用事件来得到相应的结果,并且可以直接更新UI元素的属性;还有一个方便之处是webClient还提供进度条事件,使用比较简便;

httpWebRequest一般需要自己编写“请求和响应”,并且在更新UI元素的属性的时候需要“Dispatcher.BeginInvoke(() =>{……更新UI元素操作……});”。

2)连网时的进度条。

<1>webClient的进度条。

使用webClient下载文字和图片,分别使用DownloadStringCompleted和OpenReadCompleted,进度条基本上都是一下子就跳到100,相当于等下载完了才显示进度条一样。后来经风的帮助提醒,文字可能内容小下载速度快,直接显示100;图片的下载的话,就是存在问题才导致进度条一下子100。这个问题就是——wp7中DownloadProgressChanged事件在DownloadStringCompleted和OpenReadCompleted下是否启动有关:

在windows phone7中的WebClient.DownloadProgressChanged事件只有在DownloadStringAsync事件下才可以启动,详见http://msdn.microsoft.com/zh-cn/library/system.net.webclient.downloadprogresschanged(v=vs.95).aspx



而类似于.net framework2.0、3.0等其他版本下的WebClient.DownloadProgressChanged事件在其他事件也可以启动,详见http://msdn.microsoft.com/zh-cn/library/system.net.webclient.downloadprogresschanged(v=vs.80).aspx



从msdn上看出,进度条一下子跳到100是这个原因。如果这样理解是错误的,希望能够提醒一下,指正错误~
<2>关于下载图片,windows phone7中可以直接使用BitmapImage下载图片并线时进度。
bitmapimage有自带下载功能,而且自带progresschange事件。事实上demo的结果也是进度条从0一直到100根据图片的下载循序渐进,不存在什么异常情况。因此,有个建议:下载图片的时候可以使用bitmapimage,这样不管是下载还是显示进度条都比较简便。
详见http://msdn.microsoft.com/zh-cn/library/system.windows.media.imaging.bitmapimage_events(v=vs.95).aspx



简单介绍webClient和httpWebRequest的区别,webClient的进度条在windows phone7的区别,下载图片使用bitmapimage。如果有些问题我理解错了,恳请指点一二。

感谢微软论坛window phone开发群的风对我的帮助。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: