我的C#,在程序中用到了socket和多线程 ,结果关闭程序后,任务管理器中仍然有进程,其主要原因是线程没有结束。
C#中,Thread类有一个IsBackground 的属性.,后台线程不会防止应用程序的进程被终止掉。
整个程序关闭,但是当前台线程还没结束的时候,程序是不会被从任务管理器中去掉的。所以把启动的线程 都加入IsBackground就可以点关闭时完全退出了。
threadxxxx.IsBackground = true;
附带关闭程序的代码
private void onClose(object sender, FormClosedEventArgs e)
{
_shouldStop = true;
if (tcpServer == null)
return;
if (!tcpServer.Connected)
return;
try
{
tcpServer.Close();
threadListening.Abort();
threadBroadCast.Abort();
}
catch
{
}
}
private void onCloseing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("真的要退出程序吗?", "退出程序", MessageBoxButtons.OKCancel) == DialogResult.Cancel)
{
e.Cancel = true;
}
else
{
_shouldStop = true;
if (tcpServer == null)
return;
if (!tcpServer.Connected)
return;
try
{
tcpServer.Close();
threadListening.Abort();
threadBroadCast.Abort();
}
catch
{
}
Thread.Sleep(100);
Application.Exit();
}
}
}
————————————————
版权声明:本文为CSDN博主「babytiger」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/babytiger/article/details/84589916