C# 在后台代码中完成backgroundWorker\u Runworker之后,如何重复backgroundWorker\u DoWork?

C# 在后台代码中完成backgroundWorker\u Runworker之后,如何重复backgroundWorker\u DoWork?,c#,visual-studio-2010,.net-4.0,backgroundworker,windows-applications,C#,Visual Studio 2010,.net 4.0,Backgroundworker,Windows Applications,有一个按钮如下所示: private void btnStartAdventure_Click(object sender, EventArgs e) { if (backgroundWorker5.IsBusy) { btnStartAdventures.Enabled = false; lblStatusValueInAdventures.Text = "Canceling...";

有一个按钮如下所示:

   private void btnStartAdventure_Click(object sender, EventArgs e)
    {
        if (backgroundWorker5.IsBusy)
        {
            btnStartAdventures.Enabled = false;
            lblStatusValueInAdventures.Text = "Canceling...";
            backgroundWorker5.CancelAsync();
        }
        else
        {
            txtLogInAdventures.Text = string.Empty;
            btnStartAdventures.Text = "Cancel";
            lblUsersDoneCountValueInAdventures.Text = "---";
            lblStatusValueInAdventures.Text = "Running...";


            backgroundWorker5.RunWorkerAsync();
        }
    }
我想在
backgroundWorker\u runworker完成
作业后再次调用
btnStartAdventure\u单击
事件
因此,将有一个永不结束的循环。
我说:

backgroundWorker\u RunWorkerCompleted()的末尾
现在我应该使用什么代码来调用
btnStartAdventure\u再次单击

定时器是否适合我的用途?
我如何通过做那项工作来防止上吊和撞车


提前感谢

要以编程方式启动
btnStartAdventure\u单击事件处理程序,您可以调用

// Call the Click event of btnStartAdventure.
btnStartAdventure.PerformClick();
只需将该代码放在
backgroundWorker\u RunWorkerCompleted
事件的末尾


有关更多信息,请参阅文章。

PerformClick可以完成这项工作,但不是一种好的做法。最好将impl代码重构为一个单独的方法,您可以从两个位置调用它。这样做行不通,您无法启动仍然繁忙的BGW。没错,BGW在其完成过程中仍然“繁忙”。仍然可以每次为backgroundWorker5分配一个新的Bgw。我宁愿跳过计时器。只要使用计时器就行了。将Click事件处理程序中的代码移动到一个单独的方法,您可以从计时器的Tick事件处理程序调用该方法。
// Call the Click event of btnStartAdventure.
btnStartAdventure.PerformClick();