黑马程序员 关于c# windows窗体关闭时线程未能完全退出问题(专题一)

   

<a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>

前几天在用c#  windows窗体编写坦克大战游戏时曾用过线程,在程序退出后会发现还有线程在后台运行(打开任务管理器可以看到) 现在用一部分代码来表达:            public Form1()             {             InitializeComponent();                    IPEndPoint ipendpoint=new IPEndPoint(IPAddress.Parse(txtIP.Text),int.Parse(txtPort.Text));              socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);             socket.Bind(ipendpoint);             socket.Listen(10);                               }         }

上边的代码无需看懂;

  接下来我再刚才的Form1()中添加如下代码:

    即:   public Form1()             {                  。。。。。。。

                        //一下为添加代码

                           Thread threadlisten = new Thread(new ThreadStart(ThreadListen));                            threadlisten.Start();             }

当然程序中代码不仅仅如此,在此仅为说明问题才列出以上代码。

 之后运行窗体程序后,关闭窗体。

在任务管理器中发现刚才的程序线程还在后台运行(如果你现在在运行该程序,vs就会报错提示有线程正在访问)

为什么会出现这个问题?

  难道是关闭时没写线程销毁。

  所以我又在程序中添加了如下代码:

         this.Dispose();

    或者

        Application.Exit();

等代码,结果于事无补。

怎么解决哪?

  那么就要分析线程的优先级以及线程的销毁周期

我们都知道程序退出的依据是当前程序的所有前台线程都退出(记住是前台线程),在一个正常的windows程序下,我们没有用线程,所以在退出时,

直接退出UI线程,即窗体就退出了当前程序;然而,我们一旦在程序中附加线程,那么默认情况下该线程也为前台线程,所以,我们在退出Ui(窗体)

时,并没有退出附加线程。

    所以我们想办法把我们附加的线程变为后台线程即可。

在我们上面编的程序中加上threadlisten.IsBackground=True;

                               public Form1()            

                                {           

                                     。。。。。。。

                          //一下为添加代码

                           Thread threadlisten = new Thread(new ThreadStart(ThreadListen));          

                                  threadlisten.IsBackground=True;

                             threadlisten.Start();           

                           }

之后就可以正常退出。

<a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>

原文地址:https://www.cnblogs.com/lingzeng/p/3170724.html