WebClient.DownloadDataCompleted 事件

3
很简单的问题(奇怪的是我在这里或通过Google找不到答案)。 当webClient.DownloadDataCompleted事件被触发时,它是在ui线程还是在DownloadDataAsyn线程上触发的?也就是说,我需要使用beginInvoke(winform)来更新ui还是直接访问Ui控件。
当然,我可以进行测试,但这是一个基本的问题:事件处理程序通常在执行的线程上引发,对吗?所以我怀疑在这里确实需要beginInvoke,如果不是,那是什么原因?

1
这取决于您在哪里调用了 DownloadDataAsync。如果您是从 UI 线程调用它,那么应该没问题。 - Yuval Itzchakov
1个回答

3

WebClient 能够识别当前线程的同步上下文。

如果您在 UI 线程上调用 DownloadDataAsync,则 DownloadDataCompleted 将会被传递到该 UI 线程。

除 UI 线程以外的其他线程通常没有同步上下文,如果在这些线程上启动 DownloadDataAsync,则 DownloadDataCompleted 将在任何可用线程上运行。

《C# 5.0权威指南》一书中详细描述了富客户端中的同步上下文。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接