gpt4 book ai didi

c# - 错误 : Thread was being aborted in c# Windows application

转载 作者:行者123 更新时间:2023-12-03 12:59:44 25 4
gpt4 key购买 nike

当我在一个漫长的过程中使用线程来调用等待表单时,我得到了以下错误。

"An unhandled exception of type 'System.Threading.ThreadAbortException' occurred in System.Windows.Forms.dll

Additional information: Thread was being aborted."



有时我的代码运行良好,但有时会发生此错误。
class ProgressCLS
{
private static Thread th = new Thread(new ThreadStart(showProgressForm));
public void startProgress()
{
th = new Thread(new ThreadStart(showProgressForm));

th.Start();
}

private static void showProgressForm()
{
Waiting sForm = new Waiting();
sForm.ShowDialog();
}

public void stopProgress()
{
th.Abort();
th = null;
}


}

我在 showProgressForm() 上收到此错误方法在 sform.ShowDialog()线

我调用这个类的主程序如下所示:
ProgressCLS PC = new ProgressCLS();
PC.startProgress();
TodayDate = txtDate.SelectedDateTime.ToString("yy-MM-dd");
ClearField();
CalculateMSG();
tabControl1.SelectedIndex = 1;
btnShowFolderLocal.Enabled = true;
btnShowFolderTop.Enabled = true;
btnShowDpsFailed.Enabled = true;
btnShowDpsFailed2.Enabled = true;
btnShowFolderTopic.Enabled = true;
ShowMSGButtonClicked = true;
PC.stopProgress();

任何的想法?

最佳答案

private static Thread th = new Thread(new ThreadStart(showProgressForm));  
public void startProgress()
{
th = new Thread(new ThreadStart(showProgressForm));
th.Start();
}

没什么大不了的,但是为什么要两次实例化线程?不是很干净。
我认为只有你的 ctor 中的一个是强制性的,因为你在调用 stopProgress() 时设置了 th = null。

不管怎样,看看你的代码,记住线程是异步的,所以:
        ProgressCLS PC = new ProgressCLS();
PC.startProgress();

它在专用线程中运行您的进度表(异步,因此您的代码仍在运行)。
    TodayDate = txtDate.SelectedDateTime.ToString("yy-MM-dd");
ClearField();
CalculateMSG();
...

您在主线程中执行一系列进程(同步地,您的进度表仍在后台运行)。
        PC.stopProgress();

无论您的进度表处于何种状态,它都会中止。正如您可能错过的 MSDN documentation ,它“在调用它的线程中引发 ThreadAbortException”。因此,公平地说,您的代码“有时可以工作”甚至很奇怪,因为如果它碰到 th.Abort() 行,它应该会失败。

这里有一些提示:
  • 通常我们在主线程运行UI表单,在后台处理
  • 对于您当前的设计,如果您的任何进程(ClearField() 和CalculateMSG())具有异步操作,您可能会遇到麻烦。
  • 您很少需要明确地中止线程(仅当出现意外错误时)。完成进度后只需关闭表单,垃圾收集器就可以完成剩下的工作。
  • 关于c# - 错误 : Thread was being aborted in c# Windows application,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39742965/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com