最近在写程序的时候,发现.net关闭程序的时候,不会触发线程的中止。大家可以试一下。
建立一个winform项目,然后在上面添加一个按钮,按钮触发一个能维持20s的线程。
private void button1_Click(object sender, System.EventArgs e)
{
Thread thread = new Thread(new ThreadStart(run));
thread.Start();
}
private void run()
{
System.Threading.Thread.Sleep(20000);
MessageBox.Show("run in thread");
}触发后你关掉winform,发现任务管理器中,该进程还是存在的,然后过了20s,"run in thread"弹出框出现,你单击确定后,进程关闭。说明winform关闭的时候不会自动中止线程。
解决方法:
1:你可以建立一个线程管理类。程序退出时,将各个线程中止,退出。资源,系统会自动释放。
2:建一个 public static bool EndAll = false;
然后你主线程退出时将它置 true
然后在你的每子线程循环内加上
if (类.EndAll){
break;
}
这样的话,线程提前结束。程序自然退出。
