gpt4 book ai didi

c# - 在C#中打开和关闭线程

转载 作者:太空宇宙 更新时间:2023-11-03 18:29:53 24 4
gpt4 key购买 nike

事情是这样的,我已经开始使用 C#,我想做这样的事情:

我有一个带有一个按钮和图片框的 Windows 窗体应用程序。

点击一个按钮应该导致根据实际状态将属性“Running”设置为 true/false。完成了。

此外,它应该会导致打开将在程序运行时不断执行任务的脚本。这个“工作”将在 Run() 方法中描述。而且我希望这个方法只在 Running == true 时执行,在它变为 false 的那一刻,该方法应该结束。所以我决定将它放入线程中,并在我在 Running = true 和 Running = false 之间切换的方法中尝试启动线程并中止它。

我为什么要这样做?因为我希望能够通过我在开头提到的按钮打开和关闭程序。

这是我想出的:

        Thread thProgram;


public Form1()
{
InitializeComponent();
thProgram = new Thread(new ThreadStart(this.Run));
}

private bool Running = false;


public void Run()
{
int i = 0;
while(this.Running)
{
i++;
}
MessageBox.Show("Terminated");
}

// handling bot activation button (changing color of a pictureBox1), switching this.Running property
private void button1_Click(object sender, EventArgs e)
{
if(this.Running)
{
thProgram.Abort();
pictureBox1.BackColor = Color.Red;
this.Running = false;
}
else
{
thProgram.Start();
pictureBox1.BackColor = Color.Lime;
this.Running = true;
}
}

我可以准确地点击按钮两次,看起来一切正常......但是当我第三次点击它时,错误弹出:

(突出显示行“thProgram.Start();”

An unhandled exception of type 'System.Threading.ThreadStateException' occurred in mscorlib.dll

Additional information: Thread is running or terminated; it cannot restart.

在此先感谢您能为我提供的任何帮助。

最佳答案

异常是不言自明的

当您第一次按下按钮时,线程启动并进入其主循环。第二次按下按钮会中止线程(这总是一个坏主意。您使用的那个标志就足够了)并且线程终止。

第三次按下按钮?来自 MSDN documentation对于 Thread.Start() :

一旦线程终止,它就不能再调用 Start 来重新启动。

关于c# - 在C#中打开和关闭线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24721507/

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