Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# webClient.DownloadDataCompleted事件_C#_Multithreading - Fatal编程技术网

C# webClient.DownloadDataCompleted事件

C# webClient.DownloadDataCompleted事件,c#,multithreading,C#,Multithreading,小而简单的问题(奇怪的是,我在这里或谷歌上都找不到答案)。 当webClient.DownloadDataCompleted引发事件时,它是在ui线程上引发还是在DownloadDataAsyn线程上引发?意思是我需要使用beginInvoke(winform)来更新ui或直接访问ui控件 当然我可以测试它,但这是一个基本问题:事件处理程序通常在执行的线程上引发,对吗?所以我怀疑这里确实需要beginInvoke,如果不是,原因是什么?WebClient知道当前线程的同步上下文 如果在UI线程上

小而简单的问题(奇怪的是,我在这里或谷歌上都找不到答案)。 当webClient.DownloadDataCompleted引发事件时,它是在ui线程上引发还是在DownloadDataAsyn线程上引发?意思是我需要使用beginInvoke(winform)来更新ui或直接访问ui控件


当然我可以测试它,但这是一个基本问题:事件处理程序通常在执行的线程上引发,对吗?所以我怀疑这里确实需要beginInvoke,如果不是,原因是什么?

WebClient知道当前线程的同步上下文

如果在UI线程上调用DownloadDataAsync,DownloadDataCompleted将发布到该UI线程

UI线程以外的线程通常没有同步上下文,在此类线程上启动DownloadDataAsync将导致DownloadDataCompleted在任何可用线程上运行


“简而言之,C#5.0”这本书描述了富客户端中的同步上下文。

这取决于调用
DownloadDataAsync
的位置。如果您从UI线程调用它,您应该不会有问题。