我的处理线程对于我的UI线程来说太快了

时间:2013-11-06 02:56:53

标签: c# multithreading backgroundworker synchronize

我有一个C#程序正在检查是否存在文件和注册表项,并在AppendText()上使用Form.Textbox查找它正在查找的每个文件和注册表项。

这是在异步BackgroundWorker中运行的,现在我的后台工作程序实际上正在快速处理,以至于我的UI线程被AppendText命令堵塞并且程序崩溃了。如何同步BackgroundWorker和UI线程,以便在UI线程准备好之前BackgroundWorker不会再次开始处理?

2 个答案:

答案 0 :(得分:1)

您有BackgroundWorker,因此您拥有所需的一切。在UI线程上调用progress事件,因此如果worker以标准方式报告进度(通过调用ReportProgress(int32, object),并将要附加的字符串作为第二个参数传递,则表单的进度处理程序可以调用{{1后台线程永远不会以这种方式超越UI。

我怀疑您正在调用AppendText来更新您的用户界面。解决问题的另一种方法是致电BeginInvoke

如果您的后台工作人员保存了10行,那么您可以做得更好,然后立即将它们全部传递给progress事件。这将减少更新的开销,并使后台线程更快地处理。

答案 1 :(得分:0)

想到的一种方法是排队命令并允许UI线程以自己的速度处理它们:: IE创建一个通用列表(让它称之为appendtext)参数,后台工作者添加到列表和UI线程读取,调用,然后从列表中删除