【发布时间】:2009-04-30 00:41:18
【问题描述】:
我是第一次使用BackgroundWorker,使用还不完全清楚。我可以直接从 DoWork 处理程序发送事件,还是我必须改为调用 ReportEvents 并从 ProgressChanged 处理程序发送事件?
【问题讨论】:
标签: .net winforms multithreading
我是第一次使用BackgroundWorker,使用还不完全清楚。我可以直接从 DoWork 处理程序发送事件,还是我必须改为调用 ReportEvents 并从 ProgressChanged 处理程序发送事件?
【问题讨论】:
标签: .net winforms multithreading
虽然在技术上可以从 DoWork 中引发事件并使用 UI,但您必须像在任何其他线程中一样(通过使用 Invoke() 或 BeginInvoke() 进行 UI 交互,或其他跨线程操作的正确线程同步),这将破坏BackgroundWorker 的目的。
更好的选择是调用ReportProgress(),然后以线程安全的方式引发ProgressChanged 事件。你传递了一个int,代表完成的百分比(尽管你可以用它来做一些事情),并且,可选地,任何object,你需要获取有关事件或进度的特定信息。在 ProgressChanged 中,您可以与 UI 交互、引发事件等。
【讨论】:
只需将其添加到代码中即可。
void new control.CheckForIllegelCrossPathThreads == false;
【讨论】: