C# 如果第一个BackgroundWorker在一个方法中完成,如何运行其他BackgroundWorker

C# 如果第一个BackgroundWorker在一个方法中完成,如何运行其他BackgroundWorker,c#,backgroundworker,C#,Backgroundworker,如果主backgroundWorker在一个方法中完成,如何运行其他backgroundWorker private void button1_Click(object sender, EventArgs e) { CopyWorker.RunWorkerAsync(); EnkripsiWorker.RunWorkerAsync(); CompressWorker.RunWorkerAsync(); } 我想在一次单击中尝试运行,但只有第一个BackgroundWorker

如果主backgroundWorker在一个方法中完成,如何运行其他backgroundWorker

private void button1_Click(object sender, EventArgs e)
{
   CopyWorker.RunWorkerAsync();
   EnkripsiWorker.RunWorkerAsync();
   CompressWorker.RunWorkerAsync();
}
我想在一次单击中尝试运行,但只有第一个BackgroundWorker正在运行。那么,如何运行所有BackgroundWorker。能否做到?

像这样

private void button1_Click(object sender, EventArgs e)
{
    CopyWorker.RunWorkerAsync();
    if (CopyWorker.RunWorkerCompleted == true)
    {
       EncryptWorker.RunWorkerAsync();
    }
    if (EnkripsiWorker.RunWorkerCompleted == true)
    {
          CompressWorker.RunWorkerAsync();
    }
 }
我修好了,代码是正确的 [编辑]


在上一个
BackgroundWorker
RunWorkerCompleted
事件中启动每个后续的
BackgroundWorker

private void CopyWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error == null)  // no error occurred
        EnkripsiWorker.RunWorkerAsync();
}

private void EnkripsiWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Error == null)
        CompressWorker.RunWorkerAsync();
}
另外,如果
e.Error
不是
null
,则
DoWork
事件引发异常,您可以相应地处理它(记录它、显示消息等等)


如果您希望非常详细,并且在
RunWorkerCompleted
事件中不执行任何其他操作(包括错误检查!),您可以缩短它:

CopyWorker.RunWorkerCompleted += (s, a) => EnkripsiWorker.RunWorkerAsync();
EnkripsiWorker.RunWorkerCompleted += (s, a) => CompressWorker.RunWorkerAsync();
CopyWorker.RunWorkerAsync();

尽管这样做没有什么意义,因为您可以将三个线程组合在一起。至少在第一个示例中,在启动下一个线程之前,有机会在
RunWorkerCompleted
事件中执行其他操作。

我已经完成了。我想,如果我可以一键完成,如果在按钮1中单击而不在任何“RunWorkerCompleted”中编写代码,那么它可以完成吗?你是对的,我已经修改了你的代码。谢谢我补充道,如果('.IsBusy')每个进程都完成了,我会在我的帖子中修复它。这样写代码是没有意义的。才有文案工作者也做加密工作者的工作。并让一名工人担任压缩机工人的工作。尽管运行两次CompressWorker没有什么意义。看看这个任务类,你会有更好的机会把它做好。我已经编辑了你的标题。请参阅“”,其中的共识是“不,他们不应该”。
CopyWorker.RunWorkerCompleted += (s, a) => EnkripsiWorker.RunWorkerAsync();
EnkripsiWorker.RunWorkerCompleted += (s, a) => CompressWorker.RunWorkerAsync();
CopyWorker.RunWorkerAsync();