【发布时间】:2012-05-18 09:34:36
【问题描述】:
我有 2 个异步进程,需要一个接一个地调用(一个是 XML 创建 backgroundworker,另一个是使用在第一个进程中创建的 XML 文件的稀有 BW )。这些线程的主要原因是停止 UI 冻结并通过进度条的方式提供状态更新 - 因为这种同步方法是不可取的/不可能的。
if (!CreateXMLBW.IsBusy)
{
CreateXMLBW.RunWorkerAsync("");
}
if (!CreateRarBW.IsBusy)
{
CreateRarBW.RunWorkerAsync();
}
我不能将第二个 BW 放在第一个的完成事件中,因为进程可以单独使用,因此如果我只想创建 XML 文件,我可以这样做。
我尝试过使用AutoResetEvent 和WaitOne,但这(无论出于何种原因)仍然不起作用。
还有其他方法可以等待 BW 完成而不冻结主 UI 线程吗?
【问题讨论】:
-
为什么不创建一个新的 Worker 来同步运行这 2 个 Worker 呢?然后你异步运行这个新的工作人员
-
我喜欢这个想法,但不符合 DRY。
-
很干,你不要重复代码,因为你重用了另外 2 个工人。无论如何,下面提出的任务解决方案要优雅得多:)
-
如果您想向进度条/更新标签等报告进度,这是不可能的,因为这会变成一个跨线程调用。但是是的,Task 是一个不错的解决方案,我需要一段时间才能摆脱 BGW 的思维方式。
标签: c# .net multithreading visual-studio-2010 backgroundworker