c# - 如何启动一个停止的线程

标签 c# .net winforms multithreading

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

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(线程正在运行或终止;它无法重新启动):

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()

关于c# - 如何启动一个停止的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6578001/

相关文章:

c# - 在基于 .Net 4.0 的应用程序中解码 JWT token

.net - ibm.data.informix 没有从数据库中获取正确的数据

c# - this.TopMost = true 不起作用?

c# - 无法将 TextBox 绑定(bind)到 BindingSource

c# - IsReadOnly 是否禁止您在内部更改自定义 IList 对象?

.net - 免费的 NHibernate 辅助工具?

c# - VSTO(文档级): Individual context menu in Excel (right click menu)

c# - 读取并解析 JSON 数据

c# - 关于获取锁的说明

c# - 如何从我的 SOAP 响应中删除额外的结果标记