关闭程序窗口后仍有线程残留的解决办法

我原来一直喜欢用backgroundworker搞多线程,反而是Thread类使用较少。最近更新debug tool的时候使用了一些同事的代码,遇到了线程泄漏的问题。

同事的代码中使用了Thread类而且内部是一个while(true)的死循环。这导致除了thread.Abort()外似乎没有其他终止线程的方法。。。
但是thread.Abort()不一定能够直接杀死线程,在某些情况下,即使在formclosing中调用了thread.Abort(),关闭程序窗口后仍然有线程残留。
如果不想修改原来的thread方法,可以通过

1
Application.Exit();

来退出应用程序。但是此方法并不会对后台线程和资源进行强制回收。于是用了下面这种更粗暴的方法:

1
Environment.Exit(0);

问题解决。不过这次的经历再次提醒了我,最好别在Thread中写while(true),也不要使用thread.Abort()这种不安全的方法。
如果实在担心出现野线程,还是使用backgroundworker吧。