C# thread 结束后如何再启动?

assassion1981 2017-06-29 04:27:23
简单代码如下:

Thread mainThread;;
mainThread = new Thread(StartServer);

按钮事件
if (mainThread.ThreadState == ThreadState.Running)
{
return;
}
else
{
mainThread.Start();
}

问题来了,第一次按下按钮,可以启动这个线程mainThread;但是当mainThread stop后(监测此时mainThread.ThreadState 为Stopped),再次按下这个按钮时,会报错“线程正在运行或被终止;它无法重新启动”。由于suspend和resume已经弃用了,这该怎么处理?需要再次通过 New 关键字声明这个线程,啊?
...全文
4473 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
SIEMENS-陈 2021-05-27
  • 打赏
  • 举报
回复
4#好方法,解决了我的问题,线程终止后(.Abort)后再次开启确实要重新实例化,并且已经开始的线程再次开启也会报警
有时想起 2017-07-03
  • 打赏
  • 举报
回复
4#好方法。。。。。。。。。。。。。。
menglingjun 2017-06-30
  • 打赏
  • 举报
回复

 private void btnStop_Click(object sender, EventArgs e)
        {
            thread.Abort();
        }
menglingjun 2017-06-30
  • 打赏
  • 举报
回复
2楼才是正解,Thread每次Abort关闭之后,下次要想再开始这个线程需要重新new,这个msdn上有说明,参考如下

Thread thread;
        private void btnStart_Click(object sender, EventArgs e)
        {
            try
            {
                thread = new Thread(new ThreadStart(ss));
                thread.IsBackground = true;
                thread.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message + ex.StackTrace);
            }

        }
xian_wwq 2017-06-30
  • 打赏
  • 举报
回复
引用 楼主 powersun1981 的回复:
简单代码如下: Thread mainThread;; mainThread = new Thread(StartServer); 按钮事件 if (mainThread.ThreadState == ThreadState.Running) { return; } else { mainThread.Start(); } 问题来了,第一次按下按钮,可以启动这个线程mainThread;但是当mainThread stop后(监测此时mainThread.ThreadState 为Stopped),再次按下这个按钮时,会报错“线程正在运行或被终止;它无法重新启动”。由于suspend和resume已经弃用了,这该怎么处理?需要再次通过 New 关键字声明这个线程,啊?
让线程退出后,再次启动就是新的线程了 lz可以换个思路 启动线程不退出,只不过在设置了标志位后,线程不再工作,在需要恢复后,继续工作

//全局标志位
bool bRunning= true;
void threadfunc()
{

while(true)
{
    if(bRunning)
    {
       // working
    }
    else
    {
      // do nothing
      Thread.sleep(1);
    }

    // do sth
}
}
城城城弟 2017-06-29
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
if (mainThread.ThreadState == ThreadState.Running)
             {
                 return;
             }
             else 
          {
                 mainThread = new Thread(StartServer);
                 mainThread.Start();
             }
正解
秋的红果实 2017-06-29
  • 打赏
  • 举报
回复
return只是按钮事件对应的方法返回,线程并没有,在确认安全下,要显示的线程.Abort(); 再启动,只好new了
xdashewan 2017-06-29
  • 打赏
  • 举报
回复
if (mainThread.ThreadState == ThreadState.Running)
             {
                 return;
             }
             else 
          {
                 mainThread = new Thread(StartServer);
                 mainThread.Start();
             }

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧