代码很简单,如下:
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            Thread t = new Thread(Test);
            t.Start();
            Thread.Sleep(1000);
            t.Abort();
        }
        private void Test()
        {
            Form f = new Form();
            f.ShowDialog();
        }
    }编译后,打开debug下的exe文件,点击button1后,拖拽新弹出的窗体,但不要释放。
接下来就会报“正在关闭线程”的错误。
哪位高手帮忙给解决下,谢谢。

解决方案 »

  1.   

    为什么要在线程中去新建一个窗体?因为你t.Abort(); 这时将释放资源,而f.ShowDialog要等窗口返回,而且你拖拽新弹出的窗体,不释放,窗口不能关闭,所以线程关闭出错
    你可以改成,public partial class Form1 : Form 
        { 
       private Form f;
            public Form1() 
            { 
                InitializeComponent(); 
            } 
            private void button1_Click(object sender, EventArgs e) 
            { 
                Thread t = new Thread(Test); 
                t.Start(); 
                Thread.Sleep(1000); 
                t.Abort(); 
            } 
            private void Test() 
            { 
                f = new Form(); 
                f.Show(); 
            } 
        } 
      

  2.   


    那为什么我在IDE中直接 F5 运行又不报错????!!!!
      

  3.   

    Thread t = new Thread(Test);
                t.Start();
                Thread.Sleep(1000);
                t.Join();
                t.Abort(); 
      

  4.   

    你一楼那样试试
      Form f;声明拉到外面试试
    你这样每次拖都实例一个
      

  5.   

    我的意思是想无视用户对新弹出的那个窗体所做的任何操作,强制把窗口关闭掉。或者其他什么办法能不让程序报错也成。Show()的话,是不会发生那个问题,但是Show()在刷新及操作上都存在问题。不过,还是谢谢了。
      

  6.   

    我的意思是想无视用户对新弹出的那个窗体所做的任何操作,强制把窗口关闭掉。或者其他什么办法能不让程序报错也成。Show()的话,是不会发生那个问题,但是Show()在刷新及操作上都存在问题。不过,还是谢谢了。
      

  7.   

    public partial class Form1 : Form 
        { 
      private Form f; 
            public Form1() 
            { 
                InitializeComponent(); 
            } 
            private void button1_Click(object sender, EventArgs e) 
            { 
                Thread t = new Thread(Test); 
                t.Start(); 
                Thread.Sleep(1000); 
                t.Abort(); 
            } 
            private void Test() 
            { 
                f = new Form(); 
                f.Show(); 
            } 
        } 
      

  8.   

    t.IsBackground = true;将线程设置为从属,当主线程关闭时,子线程同时关闭
      

  9.   


    没打算关主线程啊,只是想在主线程里吧子线程创建的窗口给关掉。不过还是谢谢关注。之前试了
    private void Test()
    {
        f = new Form();
        try
        {
            f.ShowDialog();
        }
        catch (ThreadAbortException)
        {
            f.Close();
        }
    }
    也没什么效果,有没有什么方法把用户正在进行的操作给disable掉或者什么啊。
      

  10.   

    结贴,看来不能用 Abort() 去强制关闭子线程的窗体还是需要等用户操作完成之后才能关闭该窗口。