C#如何挂起线程,休眠线程和终止线程

 我来答
司马刀剑
高粉答主

2018-06-07 · 每个回答都超有意思的
知道顶级答主
回答量:4.6万
采纳率:93%
帮助的人:7222万
展开全部
线程的挂起与恢复,不推荐使用Thread..::.Suspend
和Thread..::.Resume方法。你可以通过AutoResetEvent
来控制挂起和恢复,用Sleep来暂停线程执行。
AutoResetEvent 允许线程通过发信号互相通信。通常,此通信涉及线程需要独占访问的资源。

线程通过调用 AutoResetEvent 上的
WaitOne 来等待信号。如果 AutoResetEvent 处于非终止状态,则该线程阻塞,并等待当前控制资源的线程
通过调用 Set 发出资源可用的信号。

调用 Set 向 AutoResetEvent 发信号以释放等待线程。AutoResetEvent 将保持终止状态,直到一个正在等待的线程被释放,然后自动返回非终止状态。如果没有任何线程在等待,则状态将无限期地保持为终止状态。

可以通过将一个布尔值传递给构造函数来控制 AutoResetEvent 的初始状态,如果初始状态为终止状态,则为
true;否则为 false。

通俗的来讲只有等myResetEven.Set()成功运行后,myResetEven.WaitOne()才能够获得运行机会;Set是发信号,WaitOne是等待信号,只有发了信号,
等待的才会执行。如果不发的话,WaitOne后面的程序就永远不会执行。
class Class1
{
public static bool ok = false;
static AutoResetEvent are = new AutoResetEvent(false);
public void add() {
while(true){
if (ok)
{
Console.WriteLine("你好");
Thread.Sleep(1000);
}
else {
Console.WriteLine("我等待");
are.WaitOne();
}
}
}

public static void begin(){
ok = true;
are.Set();
}

public static void end()
{
ok = false;
}
}

class Program
{
public static void Main(String[] args) {
Thread t = new Thread(new ThreadStart(new Class1().add));
Thread.CurrentThread.Name = "主线程";
t.Start();
t.Name = "Class1线程";
for (int i = 0; i < 10;i++ )
{
Console.WriteLine(i);
Thread.Sleep(1000);
}
Class1.begin();
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
Thread.Sleep(1000);
}
Class1.end();
t.Abort();
Console.WriteLine(t.Name + "状态:" + t.ThreadState);
Console.ReadLine();
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式