我可以直接从BackgroundWorker的DoWork处理程序触发事件吗?

时间:2009-04-30 00:41:19

标签: .net winforms multithreading

我第一次使用BackgroundWorker,使用并不完全清楚。我可以直接从DoWork处理程序发送事件,还是必须调用ReportEvents并从ProgressChanged处理程序发送事件?

2 个答案:

答案 0 :(得分:1)

虽然技术上可以在DoWork内提升事件并使用UI,但您必须像在任何其他线程中一样(使用Invoke()或{{1}用于UI交互,或适用于其他跨线程操作的线程同步),这会破坏BeginInvoke()的目的。

更好的选择是调用BackgroundWorker,然后以线程安全的方式引发ReportProgress()事件。您传递一个代表完成百分比的ProgressChanged(尽管由您来实际执行某些操作),以及您可能需要获取有关事件或进度的特定信息的任何int。在ProgressChanged中,您可以与UI交互,引发事件等。

答案 1 :(得分:-1)

只需将其添加到代码中即可。

void new control.CheckForIllegelCrossPathThreads == false;