2015-12-25 96 views
0

所以我有我的Winform應用程序中的2個backgroundworkers,只是叫他們b1和b2。這是我的代碼:從另一個backgroundworker c停止backgroundworker#

private void b1_DoWork(object sender, DoWorkEventArgs e) 
{ 
    b2.RunWorkerAsync(); 
    Thread.Sleep(3000); 
    b2.CancelAsync(); 
} 



private void b2_DoWork(object sender, DoWorkEventArgs e) 
{ 
    Global.GetPdfThumbnail(Global.inPDF, Global.outImage); 
} 

我真正想要的是運行b2線程並使b1線程睡眠3秒,然後停止b2線程。

問題出在b2.CancelAsync();指令之後,b2 isBusy依然如此。

請幫忙!

對不起我的英語!

+0

這是所有異步所以需要一段時間的系統停止線程。這就解釋了爲什麼IsBusy在CancelAsync後立即成立。你可以等待IsBusy成爲真實的,但不清楚你想達到什麼。開始一項任務似乎毫無意義,讓它運行3秒,然後放棄已完成的任務。請詳細說明你的首要目標。 –

回答

0

把那結束你的B2 DoWork的事件:

while (b2.IsBusy) 
{ 
    if (b2.CancellationPending) 
    { 
     e.Cancel = true; 
     break; 
    } 
} 
+0

也許我不明白這一點,但我試過,這個循環永遠運行,因爲b1.IsBusy永遠是真的! :( – tuankhoa1996

+0

不能正常工作,程序無法到達這個循環,因爲它被GetPdfThumbnail命令卡住了,這條指令花了很多時間來處理,所以我必須停止它:( – tuankhoa1996

+0

看看[那個例子](http://stackoverflow.com//800767/how-to-kill-background-worker-completely),然後嘗試調用abort並設置方法而不是CancelAsync。 –