我正在查看Bart De Smet的C#5.0 Unleashed书中的一些代码,并使用WebClient
进行游戏。
在下面的代码中,我注意到回调是在UI线程上执行的。我知道EAP的WebClient.DownloadStringAsync
实现捕获了当前的SynchronizationContext
,并且是否所有EAP实现都这样做,因为似乎没有办法指定执行回调的SynchronizationContext
。
以下是相关代码:
private void loadButton_Click(object sender, EventArgs e)
{
var client = new WebClient();
client.DownloadStringCompleted += (o, args) =>
{
if (args.Error != null)
{
try
{
throw args.Error; // simply to restore structured exception handling?!
}
catch (WebException)
{
this.textBox.Text = "ERROR: " + args.Error.Message;
}
return;
}
// Already on the UI thread!
this.textBox.Text = args.Result;
};
client.DownloadStringAsync(new Uri(@"http:\\www.rpmglobal.com"));
}
答案 0 :(得分:1)
不,绝对不是。 WebClient's
实现 在您进行最终会触发事件通知您的呼叫时嗅探当前SynchronizationContext
(例如DownloadStringAsync
),但这纯粹是特定于实现的而不是EAP的保证。