Silverlight DownloadStringAsync需要UI线程吗?

Silverlight DownloadStringAsync需要UI线程吗?,silverlight,asynchronous,Silverlight,Asynchronous,可能重复: 查看此代码: Thread t = new Thread((a) => { var client = new WebClient(); client.DownloadStringAsync(new Uri("http://www.google.com")); bool pointB = true; }); t.Start(); t.Join(10000); 在Silverlight中的UI线程上运行此命令

可能重复:

查看此代码:

Thread t = new Thread((a) =>
    {
        var client = new WebClient();

        client.DownloadStringAsync(new Uri("http://www.google.com"));

        bool pointB = true;
    });

t.Start();
t.Join(10000);
在Silverlight中的UI线程上运行此命令时,即使很快调用了DownloadStringAsync(),但在Join()超时之后才能到达pointB。这意味着DownloadStringAsync()必须以某种方式要求UI线程执行其工作注意:这与DownloadString的回调无关。我知道WebClient的回调发生在UI线程上(请参见此处:)

我的代码的行为似乎表明异步调用方法本身(DownloadStringAsync())也需要UI线程。是这样吗?如果是,为什么?我还想指出,在使用
HttpWebRequest.BeginGetResponse()时,也会出现同样的行为

编辑:为了让事情变得非常清楚,当我逐步完成这段代码时,我看到的操作顺序是

  • t、 开始()
  • t、 加入(10000)
  • var client=new WebClient()
  • client.DownloadStringAsync(新Uri(“”)
  • (…Join()超时)
  • 布尔点b=真
    好吧,我想我在进一步挖掘后找到了答案。看起来所有网络代码最终都是在UI线程上运行的:

    好消息是,微软似乎修复了Silverlight 5中的这个“bug”,您可以这样称呼它:

    (在“性能改进”下的页面底部: “通过使用用于联网的后台线程减少了网络延迟。这对于使用客户端HTTP web请求的场景很有帮助。”)

    在Silverlight 5上测试代码后,我将编辑这个答案,看看它是否确实解决了这个问题


    编辑:针对Silverlight 5构建,我仍然有同样的问题。我想是时候放弃阻止UI线程了……

    你是说Join超时了?Join()超时了,然后紧接着,点击了pointB。