我正在使用WebClient
从我的网络服务异步获取信息:
wc.DownloadStringCompleted += DownloadStringCompleted;
wc.DownloadStringAsync(service);
我工作正常,但我认为DownloadStringCompleted
方法正在处理UI线程,因为我在那里进行了大量的解析,我的页面需要几秒钟才会出现。但是,由于我有如此固定的数据和进度条,我不介意它立刻出现。
我怎么能这样做?
谢谢!
答案 0 :(得分:2)
使用HttpWebRequest
而不是WebClient
。 HWR不会在UI线程上返回,因此不会阻止它更新。
答案 1 :(得分:1)
WebClient
确实在UI线程上返回,所以是的,您的解析将阻止UI。出于性能原因,您使用HttpWebRequest
代替recommended。
使用HttpWebReques
t你的事件将在后台线程上触发,这样你就可以进行所需的所有处理,但是你会遇到将结果封送回UI线程的问题,这样你就可以更新UI (否则您将看到跨线程违规异常)。您可以使用Dispatcher
使用以下方法将结果封送回UI:
private void UpdateUI(Results results)
{
if (!Deployment.Current.Dispatcher.CheckAccess())
Deployment.Current.Dispatcher.BeginInvoke(() => UpdateUI(results));
else
{
//Update the UI
{
}
答案 2 :(得分:0)
在Mango中,WebClient已更改,以便
wc.DownloadStringAsync(service);
从后台线程调用响应也来到后台线程。您可以使用BackgroundWorker来实现此目的。