BaseForm 为主窗体,当它启动时内部的几个线程和几个times组件也同时启动,但点击“退出”按钮后虽然窗体关闭了,但在windows进程列表中还有这个进程,
请问这是怎么回事阿?我在“退出”前因为里面线程太多了所以没有关闭这些线程,是这个原因码?如何才能彻底的关闭这个进程?
下面启动和退出的代码:
启动的代码:        [STAThread]
        private static void Main()
        {
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new BaseForm());
    //System.Diagnostics.Process.GetCurrentProcess().Kill(); //用这俩句可以关闭进程,但如果有其他的方法的话尽量不用这个方法
            //System.Diagnostics.Process.GetCurrentProcess().WaitForExit(); 
        }
关闭的代码:
        private void radEXIT_CheckedChanged(object sender, EventArgs e)
        {
           //Application.Exit() //不起作用,只能关闭当前窗体,但在但在windows进程列表中还有这个进程
           this.Dispose();      //不起作用,只能关闭当前窗体,但在但在windows进程列表中还有这个进程
        }

解决方案 »

  1.   

    Thread.IsBackground = true;
    --------------
    当它启动时内部的几个线程和几个times组件也同时启动
    ----------------------------------------
    将这些线程的IsBackground 全设置为true
      

  2.   

    可以试试System.Threading.Thread.CurrentThread.Abort();来关闭线程
      

  3.   

    安全线程退出
    System.Threading.Thread thread;
            System.Threading.ManualResetEvent obj = new System.Threading.ManualResetEvent(false);
            private void Form1_Load(object sender, EventArgs e)
            {
                
                thread = new System.Threading.Thread(new System.Threading.ThreadStart(test));
                thread.Start();
            }        public void test()
            {
                obj.Reset();
                while (true) { Console.WriteLine(Guid.NewGuid()); 
                    if (obj.WaitOne(10, false) == true) 
                        break; }
            }        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                obj.Set();
            }
      

  4.   

     [STAThread] 
    ----------------------------
    我用 STAThread 多线程程序没法生成,
    改成 MTAThread 才成功-_-'',
    原来STAThread也行啊,学习。