C# 线程的挂起与恢复

本文探讨了在C#中如何使用AutoResetEvent实现线程的挂起和恢复。线程通过WaitOne阻塞并等待Set信号,以实现资源的互斥访问。由于thread.Suspend()和thread.Resume()已过时,作者提出了使用AutoResetEvent作为替代方案,以控制多线程的启动、暂停和继续执行。在Java中,类似的机制可以通过wait和notify实现,但在C#中寻找类似功能时,作者遇到了困惑并希望找到解决方案。
摘要由CSDN通过智能技术生成

AutoResetEvent 允许线程通过发信号互相通信。通常,此通信涉及线程需要独占访问的资源。

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

调用 SetAutoResetEvent 发信号以释放等待线程。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 {
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值