使用单独的工作线程为异步任务提高UI响应能力

时间:2011-07-23 23:05:04

标签: c# silverlight web-services silverlight-4.0 asmx

我的silverlight应用程序从asmx webservice(比如集A和集B,集A有几个文件,集B有大量文件)异步提取两组文件。在接收集合中的每个文件时,应该对其进行解析,并且需要更新某些数据结构。 一旦收到整个集合A,就会向Web服务发出异步请求以获取集合B.

收到设置A后,即可使用该应用程序。但由于仍然从集合B接收文件,因此UI不是非常敏感。有什么方法可以在后台获取和处理文件时提高响应能力。 async_task_completed的webservice处理程序是否适用于不同的线程。拥有BackgroundWorker线程是否有意义?

编辑:只是为了澄清,一组(数百个文件)的异步请求是一起发布的。

1 个答案:

答案 0 :(得分:2)

将猜测工作排除在等式之外。只需将此行临时放入Web服务调用的完成代码中即可。

MessageBox.Show(Deployment.Current.Dispatcher.CheckAccess().ToString());

如果您看到“True”,那么您在UI线程中,因此您(至少)需要离开它来进行处理。正如您所建议的那样,一种简单的方法是使用BackgroundWorker

如果您看到“False”,那么您已经在后台线程中,因此如果是其他来源,您的性能会出现问题。