2015-12-25 57 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。 –