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 正在终止线程。
请问各位高手,这个应该如何解决?
{
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 正在终止线程。
请问各位高手,这个应该如何解决?
{
if (trd != null && trd.IsAlive == true)
{
trd.Abort();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "错误");
}这一步就错了,trd.Abort()关不掉线程
异步关闭线程呢。不影响关闭窗口的速度。
while(flag)
{
...
}停止线程:
flag=false;
t.join();
t.IsBackGround=true;
t.Start();
设置为后台工作就可以了,窗体关闭,线程也关闭了