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

问题描述 投票:-2回答:2

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

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

c# multithreading backgroundworker synchronize
2个回答
1
投票

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

我怀疑你是在调用BeginInvoke来更新你的用户界面。解决问题的另一种方法是调用Invoke

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.