Asynchronous Windows Phone 7是否允许异步编程?

Asynchronous Windows Phone 7是否允许异步编程?,asynchronous,windows-phone-7,Asynchronous,Windows Phone 7,我正在为wp7构建一个新闻阅读器应用程序。我希望进行一些后台活动,比如将下载的内容写入独立存储。有没有办法在不阻塞UI线程的情况下实现这一点 WebClient的DownloadStringCompleted事件是异步的,对吗?我可以在那里做吗?您当然可以使用更新UI,以避免跨线程异常。但是,建议使用HttpWebRequest而不是WebClient,因为WebClient在UI线程上返回。这可以帮助您理解模型,或许有助于开发应用程序。它是异步的,但建议不要使用WebClient进行任何非琐碎

我正在为wp7构建一个新闻阅读器应用程序。我希望进行一些后台活动,比如将下载的内容写入独立存储。有没有办法在不阻塞UI线程的情况下实现这一点


WebClient
DownloadStringCompleted
事件是异步的,对吗?我可以在那里做吗?

您当然可以使用更新UI,以避免跨线程异常。但是,建议使用HttpWebRequest而不是WebClient,因为WebClient在UI线程上返回。这可以帮助您理解模型,或许有助于开发应用程序。

它是异步的,但建议不要使用WebClient进行任何非琐碎的处理,因为这项工作将在UI线程上完成,正如Indy正确指出的那样

Webclient这样做是为了方便您不必调用Dispatcher

Dispatcher.BeginInvoke( () => { /* ui update code */ } );
这是以您在UI线程上执行的回调中的所有处理为代价的

HttpWebRequest(由WebClient本身使用)将允许您在UI线程之外进行大部分处理,并且只需通过Dispatcher在UI线程上进行UI更新(请参阅上文)

请注意,如果执行此操作的强度过大,仍然可以阻止UI线程。用Thread.Sleep(xxx)隔开UI更新的间隔将有助于在这种情况下保持UI响应

要更深入地了解HttpWebRequest和WebClient之间的差异,以及要演示的工作项目示例,请参阅我的文章


WP7中的所有网络访问都是异步的,大多数网络api类甚至不公开同步方法,事实上,您必须非常努力地与框架抗争


正如在其他答案中所指出的,您必须注意的是,您需要通过UI线程更新UI,如果您正在使用代码隐藏,则可以使用Dispatcher.BeginInvoke。如果您使用的是某种MVVM样式的模式,那么INotifyPropertyChanged事件将自动调度回UI线程,因此您无需担心它(INotifyCollectionChanged from ObservableCollection并非出于未知原因)。

是的,确实如此。是向WP7上的任何类型公开异步功能的方式。

不幸的是,INotifyPropertyChanged事件不会分派到UI线程