我创建一个新线程并从主线程启动它。
m_MyThread = new Thread(HandleMyThread);
m_MyThread.IsBackground = true;
m_MyThread.Start();
private void HandleMyThread()
{
while (true)
{
Thread.Sleep(5000);
return;
}
}
5 秒后,该线程将完成并且其 ThreadState 为 Stopped。当用户单击按钮时我想再次启动它,但我得到了ThreadStateException (Thread is running or terminated; it cannot restart)
:
private void button1_Click(object sender, EventArgs e)
{
m_MyThread.Start(); // ->raise exception
}
请帮助我如何重新启动已停止的线程。谢谢。
我知道这个问题有点老了,但我想我会发布回复以防其他人来到这里。
对于此示例代码,如果将其更改为如下所示:
Thread m_MyThread;
private void HandleMyThread()
{
while (true)
{
Thread.Sleep(5000);
return;
}
}
private void button1_Click(object sender, EventArgs e)
{
if (!m_MyThread.IsAlive)
{
m_MyThread = new Thread(HandleMyThread);
m_MyThread.IsBackground = true;
m_MyThread.Start();
}
}
这将创建线程的一个新实例并启动它。这ThreadStateException
错误的原因很简单,您无法重新启动处于停止状态的线程。m_MyThread.Start()
仅对以下线程有效Unstarted
状态。在这种情况下需要做的是创建一个新的线程实例并调用Start()
在新实例上。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)