0

有類似下面的按鈕:backgroundWorker_RunWorkerCompleted在代碼後面如何重複backgroundWorker_DoWork?

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_RunWorkerCompleted工作再打電話btnStartAdventure_Click事件!
所以會有一個永無止境的循環。
我把:

Thread.Sleep(3600000); 

backgroundWorker_RunWorkerCompleted()結束。
現在我應該使用什麼代碼再次撥打btnStartAdventure_Click
定時器是否適合我的目的?
我該如何防止通過做這項工作來掛起和崩潰?

在此先感謝

+1

只需使用計時器。將Click事件處理程序中的代碼移動到可以從計時器的Tick事件處理程序中調用的單獨方法。 –

回答

1

要以編程方式觸發btnStartAdventure_Click事件處理程序,您可以撥打

// Call the Click event of btnStartAdventure. 
btnStartAdventure.PerformClick(); 

只是把這些代碼在backgroundWorker_RunWorkerCompleted事件的結束。

請參閱this文章以獲取更多信息。

+0

PerformClick將完成這項工作,但這不是一個好習慣。最好將impl代碼重構爲可從兩個地方調用的單獨方法。 –

+0

它不會完成這項工作,您無法啓動仍然繁忙的BGW。 –

+0

對,一個bgw在完成時仍然是「忙碌」。每次都可以爲backgroundWorker5分配一個新的Bgw。我寧願跳過計時器。 –