我正在寻找一种重新启动已被Abort()停止的线程的方法。

public partial class MyProgram : Form
{
  private Thread MyThread = new Thread(MyFunction);
  private System.Windows.Forms.Button startStopBtn = new System.Windows.Forms.Button();
  public MyProgram()
  {
    MyThread.Start();
    startStopBtn += new EventHandler(doStop);
    startStopBtn.Text = "Stop";
  }
  private static void MyFunction()
  {
    // do something
  }
  private void doStop(object sender, EventArgs e)
  {
    MyThread.Abort();
    startStopBtn -= new EventHandler(doStop);
    startStopBtn += new EventHandler(doStart);
    startStopBtn.Text = "Start";
  }
  private void doStart(object sender, EventArgs e)
  {
    MyThread.Start(); // << Error returned when clicking the button for 2nd time
    startStopBtn -= new EventHandler(doStart);
    startStopBtn += new EventHandler(doStop);
    startStopBtn.Text = "Stop";
  }
}

任何的想法?

最佳答案

在doStart()中调用MyThread.Start()之前,只需添加MyThread = new Thread(MyFunction)。不要在您的方法之外创建线程,该空间被认为是用于声明的。

编辑:请注意,用thread.Abort()杀死线程可能非常危险。您应该尝试完成干净的多线程,就像Groo在他的帖子中描述的那样。

10-08 15:20