如何启动已停止的线程

Leo*_* Vo 9 .net c# multithreading winforms

我创建一个新线程并从主线程启动它.

m_MyThread = new Thread(HandleMyThread);
m_MyThread.IsBackground = true;
m_MyThread.Start();

private void HandleMyThread()
{
    while (true)
    {
        Thread.Sleep(5000);
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

5秒后,此线程将完成并且其ThreadState已停止.我想在用户点击按钮时再次启动它,但我得到一个ThreadStateException (Thread is running or terminated; it cannot restart):

private void button1_Click(object sender, EventArgs e)
{
    m_MyThread.Start(); // ->raise exception
}
Run Code Online (Sandbox Code Playgroud)

请帮我如何重新启动已停止的线程.谢谢.

Dan*_*nks 9

我知道这个问题有点陈旧,但我想如果其他人来到这里,我会发布回复.

对于此示例代码,如果它被更改为如下所示:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个新的线程实例并启动它.该ThreadStateException错误是因为,简单地说,您无法重新启动处于停止状态的线程. m_MyThread.Start()仅对该Unstarted州的线程有效.在这种情况下需要做的是创建一个新的线程实例并Start()在新实例上调用.


Iva*_*van 2

如果想复用线程而不是每次都new一个线程,可以考虑线程池的实现。