c#单击按钮停止线程

时间:2018-11-24 22:29:24

标签: c# multithreading

如何通过单击按钮结束线程?我通过单击按钮开始线程。

new Thread(SampleFunction).Start();

和我的线程:

    void SampleFunction()
    {
        int i = 0;
        while (true)
        {
            string Seconds = DateTime.Now.ToString("ss");
            if (Seconds == "00")
            {
                int i2 = i++;
                string myString = i2.ToString();
                AppendTextBox(myString);
                Thread.Sleep(2000);
            }                
        }
    }

    public void AppendTextBox(string value)
    {
        if (InvokeRequired)
        {
            this.Invoke(new Action<string>(AppendTextBox), new object[] { value });
            return;
        }
        textBox4.Text += value;
    }

我如何取消它?以下内容不起作用:

private void button8_Click(object sender, EventArgs e)
    {
     SampleFunction.Abort();
    }

1 个答案:

答案 0 :(得分:4)

SampleFunction是一种方法,而不是Thread对象,因此您不能像这样调用Abort()

您需要保留对Thread的引用:

var thread = new Thread(SampleFunction);
thread.Start();

然后,当您想杀死Abort()时,可以呼叫它:

thread.Abort();

但是请记住,它确实可以杀死Abort()的作用是在线程中抛出ThreadAbortException。因此它可以随时停止,并使事情保持意外状态,因此,根据您在线程中的操作,它可能不是最佳方法。

这里有几篇文章讨论了这一点以及可能更好的停止线程的方法: