可能重複:
Execute a WebRequest in a Background thread while UI Thread is blockedDownloadStringAsync需要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線程上(請參閱:Silverlight Background Thread using WebClient)。
我的代碼的行爲似乎表明,異步調用方法本身(DownloadStringAsync())也需要UI線程。是對的嗎?如果是這樣,爲什麼?我也想指出此相同的行爲使用HttpWebRequest.BeginGetResponse()
編輯時表現:把事情一清二楚,操作我看時,我通過這個代碼步驟的順序是
- t.Start()
- t.Join(10000);
- var client = new WebClient();
- client.DownloadStringAsync(new Uri(「http://www.google.com」)); (加入()超時)
- bool pointB = true;
你是說加入超時? – McAden
Join()超時,然後緊接在pointB之後。 – JoeCool