如何再次启动一个线程

emyueguang 2009-10-10 12:36:03

static void Main(string[] args)
{
Thread th = new Thread(new ThreadStart(fun));
th.Start(); //首次启动子线程

Thread.Sleep(3000); //主线程停三秒,等待子线程结束

th.Start(); //再次启动子线程(这个时候子线程已经停了) --这个地方就会出现异常:线程正在运行或被终止;它无法重新启动。
}

static void fun()
{
Thread.Sleep(1000); //子线程停一秒
}

我想再次用这个线程的句柄th启动线程,怎么实现?
...全文
334 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wartim 2009-10-10
  • 打赏
  • 举报
回复
你这里最好用异步
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace ConsoleApplication30
{
class Program
{
delegate void f();

static f F = new f(fun);

static void Main(string[] args)
{
IAsyncResult AR = F.BeginInvoke(null, null);
AR.AsyncWaitHandle.WaitOne(3000); //等3秒,不填等于死等
if (AR.IsCompleted) // 超时?
{
AR = F.BeginInvoke(null, null);
AR.AsyncWaitHandle.WaitOne(3000); //等3秒,不填等于死等
if (AR.IsCompleted) // 超时?
Console.WriteLine("ok");
}
Console.Read();
}

static void fun()
{
Thread.Sleep(1000); //子线程停一秒
Console.Write(".");
}
}
}
优效soft 2009-10-10
  • 打赏
  • 举报
回复
你应该把他挂起 在启动
mngzilin 2009-10-10
  • 打赏
  • 举报
回复
将这句Thread.Sleep(3000);换成下面的就可以了
while ((th.ThreadState & (ThreadState.Unstarted | ThreadState.Stopped)) == 0)
{
;//子如果线程没有结束,则继续
}
應燁軍 2009-10-10
  • 打赏
  • 举报
回复
线程一旦终止,它就无法通过再次调用“开始”来重新启动。

你的代码是不可行的,不过你可以使用Suspend()方法挂起线程,然后使用Resume()方法恢复线程,

使用这个方法要注意的是 如果你有对多线程间资源互写的操作容易造成死锁! 如果你只是要实现暂停和启

动线程,建议你用一个bool 变量来标识 通过外部改变这个 标识的值来控制 线程是否继续执行

emyueguang 2009-10-10
  • 打赏
  • 举报
回复
这个线程函数执行了一个功能,我想让它再执行一次!

111,098

社区成员

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

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

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