不管是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: