我正在运行这样的线程:
实例变量
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”。我该如何解决这个问题?
答案 0 :(得分:1)
不要在构造函数中创建工作线程。您应该将此代码移动到btnTransferData_Click方法中。
答案 1 :(得分:1)
你是否确定每次调用btnTransferData_Click时都在创建一个新线程(如同在同一实例中没有调用两次点击一样)?
查看here看来这可能是因为你已经执行了线程后再次调用它。在Click方法中创建线程(而不是在构造函数中)以避免这种情况。
答案 2 :(得分:0)
是的,线程已执行。你不能“重启”它。对于此示例,解决方案是创建一个新线程并运行该线程。
答案 3 :(得分:0)
使用后,您无法重用Thread
实例。您需要创建一个新的Thread
实例才能再次运行它。
但是,您可能正在编写WinForms应用程序,但应使用BackgroundWorker
类。至少有了这个,您可以根据需要多次重用工作实例。