我有一个C#程序正在检查是否存在文件和注册表项,并在AppendText()
上使用Form.Textbox
查找它正在查找的每个文件和注册表项。
这是在异步BackgroundWorker
中运行的,现在我的后台工作程序实际上正在快速处理,以至于我的UI线程被AppendText
命令堵塞并且程序崩溃了。如何同步BackgroundWorker
和UI线程,以便在UI线程准备好之前BackgroundWorker
不会再次开始处理?
答案 0 :(得分:1)
您有BackgroundWorker
,因此您拥有所需的一切。在UI线程上调用progress事件,因此如果worker以标准方式报告进度(通过调用ReportProgress(int32, object),并将要附加的字符串作为第二个参数传递,则表单的进度处理程序可以调用{{1后台线程永远不会以这种方式超越UI。
我怀疑您正在调用AppendText
来更新您的用户界面。解决问题的另一种方法是致电BeginInvoke
。
如果您的后台工作人员保存了10行,那么您可以做得更好,然后立即将它们全部传递给progress事件。这将减少更新的开销,并使后台线程更快地处理。
答案 1 :(得分:0)
想到的一种方法是排队命令并允许UI线程以自己的速度处理它们:: IE创建一个通用列表(让它称之为appendtext)参数,后台工作者添加到列表和UI线程读取,调用,然后从列表中删除