|
|
1
1
您不希望在自己的线程中创建UI元素。启动应用程序的主线程应该是UI线程。创建并显示此线程上的所有元素。所有繁重的、长期的或阻塞的工作都应该在它们自己的线程上完成。 当需要更新主(UI)线程(如更新进度条或显示最终结果)时,可以使用BackgroundWorker执行单个附加任务,而不阻塞UI,并获得自动同步。 如果需要多个线程执行长时间运行的工作,请使用线程池。如果需要更新UI元素,则必须进行自己的跨线程同步。如果这就是你要走的路,那么关于如何做到这一点已经有很多答案了。 如果有多个线程在等待发生什么事情时被阻塞,那么您应该自己使用线程。这将防止线程池缺少线程,因为它们都是阻塞的。(我相信这在.NET 4中已经改变了,所以如果您要确定该版本的目标,那么在这种情况下您可能很容易继续使用threadpool。) |
|
|
2
0
您是否尝试将阻塞调用放入BackgroundWorker(独立线程)?当阻塞调用完成时,后台工作线程就完成了(由主UI线程处理)。然后在完成的处理程序中,您可以显示您的表单/消息或其他内容… 如果你没试过,那就试试看。注意,我没有测试过这个,因为我不知道你在做什么。 干杯。 |
|
|
user107586 · 如何处理等待句柄不会导致无限循环? 10 月前 |
|
|
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 10 月前 |
|
|
BenjiFB · C#内存缓存:在一次操作中追加到列表? 10 月前 |
|
|
András Takács · Python多线程问题 1 年前 |
|
|
András Takács · Python多线程错误 1 年前 |