线程一旦启动运行,在窗口关闭后,会发现应用还是继续运行着,任务管理器依然能够看到。此时根本无法继续在 IDE 中运行我们的程序,这样的问题应该怎样解决?

解决方案 »

  1.   

    最好办法就是你自己关闭之前记得停止线程。停止的方法很多,比如设置线程退出条件,或是强行终止,或是最简单的。一句话:Main函数最后写上:Environment.Exit(0);
      

  2.   

    Application.ExitThread();行不?
    要不用代码找到所有Process,然后Kill();
      

  3.   

    你线程的代码有循环体没有退出。在循环体中加个标志if(isclosing==true)判断。在form_closing中设置标志isclosing=false;
      

  4.   

           private void button1_Click(object sender, EventArgs e)
            {
                Thread t = new Thread(new ThreadStart(DoSomething));            t.Start();
            }        private void DoSomething()
            {
                while (true)
                {
                                    this.label1.Text = DateTime.Now.ToLocalTime().ToString();
                    Thread.Sleep(1000);
                }
            }
      

  5.   

    我想在窗口关闭过程中写 Process.GetProcessesByName("应用程序名称")[0].Kill();总觉得不是个好办法。
      

  6.   

    private void button1_Click(object sender, EventArgs e)
      {
      Thread t = new Thread(new ThreadStart(DoSomething));  t.Start();
      }  private void DoSomething()
      {
      while (true)
      {
          this.label1.Text = DateTime.Now.ToLocalTime().ToString();
      Thread.Sleep(1000);
      }
      }你这个不会异常?
    1.辅助线成直接操作了ui线程的资源,应该会提示跨线程调用的异常
    2.一般不这么干的,比如加个标记public class form1 : form
    {
    private bool running = false;
        public void test()
        {
    running = true;
    new Thread((ThreadStart)delegate
    {
    while(!this.IsDisposed && running)
    {
    this.Invoke((EventHandler)delegate
    {
    this.label1.Text = DateTime.Now.ToLocalTime().ToString();
    });
    Thread.Sleep(1000);
    }
    }).Start();
        }

    //这样关闭的时候设置一下running为false或是直接关闭,都不会有线程没执行完的情况。
    }
      

  7.   

    LS说的是,经验太少没发现.辅助线程是不能操作主线程的资源的,用Invoke和BeginInvoke()
      

  8.   

    在FormClosing事件中t.Abort()就可以了