为什么BackgroundWorker的ProgressChanged事件在不调用RunWorkerAsync的情况下工作?

时间:2013-05-18 17:05:24

标签: c# winforms backgroundworker

我对BackgroundWorker有疑问。我可以调用ProgressChanged事件,而无需使用RunWorkerAsync启动帖子。

我不明白为什么会这样。如果新线程还没有启动,它如何通知原始线程?

这似乎无论如何都行不通,因为它在没有问题的情况下更新了GUI,在我实现BackgroundWorker之前就不是这样了。

1 个答案:

答案 0 :(得分:7)

调用ReportProgressChanged()将始终引发ProgressChanged事件,无论从哪个线程调用它。

ReportProgressChanged()的实现中,如果没有从UI线程调用它,则会在UI线程上引发事件。如果从UI线程调用ReportProgressChanged() ,那么它只需引发事件而无需进行额外的编组操作。