2010-02-05 179 views
2

我有一个简单的程序,它拥有backgroundworkers,并且它不停地运行,无论何时关闭它,它总会有一些仍在运行(或全部),并且我注意到关闭应用程序并没有“完全杀死它。运行一段时间后,Windows任务管理器的进程选项卡上仍有进程(每次运行1个进程)。Backgroundworker线程不关闭程序关闭?

他们为什么还留着?我为他们做什么不是?

ps .:我已经在应用程序关闭时阅读了关于背景工作者行为的问题,但我想这不是按照预期行事。有什么建议么 ?

+0

我要问的细节:你真的单独使用BackgroundWorker的,或者你还可以创建一些“手册”的主题?如果是的话,那个手动线程('new Thread()')必须有'IsBackground = true;' – 2010-02-05 10:32:07

+0

我刚刚问过它之前检查过它,在开始使用backgroundworker之前我使用了正常线程,现在我看看如果我没有没有错过任何仍在代码中的人,不,没有任何正常的线程,当我使用它们时,它们是IsBackground = true; – Marcelo 2010-02-05 10:57:17

回答

2

更好的办法是停止/杀死使用封闭广告应用程式前一个事件或自定义操作线程。

像如下

private void ButtonStopBGWorker_Click(object sender, RoutedEventArgs e) 
{ 
BackgroundWorker worker = sender as BackgroundWorker; 
if ((worker.CancellationPending == true)) 
    { 
     e.Cancel = true; 
     break; 
    } 
} 

这篇文章at the forum will给你更深入的了解。 另外,看看MSDN上有关如何管理Backgroundworker Threads

希望它可以帮助

0

他们是你自己旋转起来的线程吗?如果你创建自己的线程,我相信你需要将它们设置为后台线程,以使它们与主线程一起终止。否则,他们会保持这个过程的活力。从内存中的代码来设置特定线程的背景是这样的:

Thread t = new Thread(YouStartMethod); 
t.IsBackground = true; 
t.Start(); 

希望这有助于

+0

不,他们是背景主题的线程(我不确定我可以这样说,对不起)我不会自己开始线程。 – Marcelo 2010-02-05 10:42:01