首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在UI被阻塞时,在后台线程中执行WebRequest

在UI被阻塞时,在后台线程中执行WebRequest
EN

Stack Overflow用户
提问于 2011-12-11 17:39:16
回答 2查看 613关注 0票数 1

当UI线程不再被阻塞时,下面的代码为什么在5秒后执行WebRequests?Thread.Sleep在UI线程中,而WebRequests的实例化和调用都发生在ThreadPool线程中。

代码语言:javascript
复制
Loaded += (sender, args) => {

    for (int i = 0; i < 5; i++) {

        ThreadPool.QueueUserWorkItem(state => {
            var request = WebRequest.CreateHttp("http://google.com");
            request.BeginGetResponse(ar => Debug.WriteLine("Request finished"), null);
        });

        Thread.Sleep(1000);
    }

};

在UI被阻塞时,我应该编写哪些代码来在后台线程中执行WebRequest?

编辑: ...to更具体。为什么这个请求在10秒后在后台线程中被执行?

代码语言:javascript
复制
Loaded += (sender, args) => {

    ThreadPool.QueueUserWorkItem(state => {
        var request = WebRequest.CreateHttp("http://google.com");
        request.BeginGetResponse(ar => Debug.WriteLine("Request finished"), null);
    });
    Thread.Sleep(10000);

};
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-06 15:39:30

我在这里问了几乎完全相同的问题(既然我找到了你的问题,我将结束这个问题):DownloadStringAsync requires UI thread?

答案是所有的网络代码最终都会在版本5之前被封送到Silverlight中的UI线程。不幸的是,即使我在Silverlight 5上构建时,我仍然会遇到相同的问题,所以我仍然在调查.

票数 1
EN

Stack Overflow用户

发布于 2011-12-11 18:49:31

也许你是想这么做:

代码语言:javascript
复制
Loaded += (sender, args) =>
{
    ThreadPool.QueueUserWorkItem(dummy =>
    {
        for (int i = 0; i < 5; i++)
        {

            ThreadPool.QueueUserWorkItem(state =>
            {
                var request = WebRequest.CreateHttp("http://google.com");
                request.BeginGetResponse(ar => Debug.WriteLine("Request finished"), null);
            });

            Thread.Sleep(1000);
        }
    });

};

这根本不会阻止UI,调试消息每秒钟都会出现。或者你想要什么行为?你真的想阻止UI (你不应该.)吗?

编辑(编辑后):

我明白了。这有点违背直觉,我现在没有答案。我强烈怀疑请求需要一些UI线程活动。您的主线程应该始终响应,永远不要阻塞,所以这是没有问题的。除非你阻止了主线程。因此,他们本可以省去为有缺陷的情况(这就是)进行优化的工作。

然而,答案将是有趣的。我从桌面世界中知道,浏览器相关的东西需要主线程。所以我建议不要再阻止它了:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8466036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档