1、退出线程
threadRead.Abort();
一开始使用此函数进行线程终止,但在调用此函数之后发现线程依旧在执行,并没有退出,于是改用threadRead.Suspend();函数。
threadRead.Suspend();
PS:执行此函数之后,threadRead线程被清空,再进行调用此线程时,需要重新创建该线程。
threadRead = new Thread(ReadMessages);
threadRead.Start();
2、重写Winform关闭按钮
protected override void WndProc(ref Message m)
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_CLOSE = 0xF060;
if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
{
//捕捉关闭窗体消息
System.Environment.Exit(0);//彻底退出所有线程
return;
}
base.WndProc(ref m);
}
-
this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;
-
Application.Exit(); 强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;
-
Application.ExitThread(); 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;
-
System.Environment.Exit(0); 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。