-2

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

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

4

2 回答 2

1

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

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

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

于 2013-11-06T14:56:03.510 回答
0

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

于 2013-11-06T03:46:38.450 回答