System.Threading.ThreadStateException

时间:2011-03-21 00:05:28

标签: c#

我正在运行这样的线程:

实例变量

private Thread workerThread = null;

在contructor中

workerThread = new Thread(new ThreadStart(this.remoteRequestBackgroundTask));

在方法中,我启动线程

    private void btnTransferData_Click(object sender, EventArgs e)
    {
        ////Start the thread
        workerThread.Start();
        //remoteRequestBackgroundTask();
    }

remoteRequestBackgroundTask

    private void remoteRequestBackgroundTask()
    {
      //does some background processing and then finishes
     }

第一次运行Thread时这是有效的,但是当它完成并再次运行它时,我得到“System.Threading.ThreadStateException”。我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

不要在构造函数中创建工作线程。您应该将此代码移动到btnTransferData_Click方法中。

答案 1 :(得分:1)

你是否确定每次调用btnTransferData_Click时都在创建一个新线程(如同在同一实例中没有调用两次点击一样)?

查看here看来这可能是因为你已经执行了线程后再次调用它。在Click方法中创建线程(而不是在构造函数中)以避免这种情况。

答案 2 :(得分:0)

是的,线程已执行。你不能“重启”它。对于此示例,解决方案是创建一个新线程并运行该线程。

答案 3 :(得分:0)

使用后,您无法重用Thread实例。您需要创建一个新的Thread实例才能再次运行它。

但是,您可能正在编写WinForms应用程序,但应使用BackgroundWorker类。至少有了这个,您可以根据需要多次重用工作实例。