都是多线程惹得祸,c# 的窗体为什么在关闭之后,进程还有?

我的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();
            }

https://blog.csdn.net/babytiger/article/details/84589916m_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年6月13日
下一篇 2020年6月13日

相关推荐