private void FrmTest_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (ImportingFlag == true)
            {
                if (MessageBox.Show("任务正在运行,是否继续关闭?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information) == DialogResult.Cancel)
                {
                    e.Cancel = true;
                }
                else
                {
                    try
                    {
                        if (trd != null && trd.IsAlive == true)
                        {
                            trd.Abort();
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "错误");
                    }
                }
            }
        }我这种方法,想在关闭窗口时,关闭程序正在导入Excel到数据库的线程,但是会报错。
提示的错误是System.Threading.ThreadAbortException 正在终止线程。
请问各位高手,这个应该如何解决?

解决方案 »

  1.   

    try
                        {
                            if (trd != null && trd.IsAlive == true)
                            {
                                trd.Abort();
                            }
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show(ex.Message, "错误");
                        }这一步就错了,trd.Abort()关不掉线程
      

  2.   

    Dispatcher.BeginInvoke 
    异步关闭线程呢。不影响关闭窗口的速度。
      

  3.   

    在线程中设置标识
    while(flag)
    {
    ...
    }停止线程:
    flag=false;
    t.join();
      

  4.   

    Thread t =............................
    t.IsBackGround=true;
    t.Start();
    设置为后台工作就可以了,窗体关闭,线程也关闭了