C#暂停和恢复(Thread.Suspend()和Thread.Resume() vs AutoResetEvent()和EventWaitHandle())

2023-12-14 09:29:12

目录

一、Thread.Suspend()和Thread.Resume()

二、AutoResetEvent()和EventWaitHandle()

1.AutoResetEvent()

2.EventWaitHandle()

3.示例及生成效果?


一、Thread.Suspend()和Thread.Resume()

????????自 .NET 2.0 以后(含),Thread.Suspend() 和 Thread.Resume() 这两个方法已过时,被VS抛弃。不被任何现在流行的VS支持使用。

????????Thread.Suspend 方法 (System.Threading) | Microsoft Learn ?https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.thread.suspend?view=net-8.0

????????Thread.Resume 方法 (System.Threading) | Microsoft Learn ?https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.thread.resume?view=net-8.0?

????????只支持历史版本.NET Framework?1.1。.NET Framework.NET Framework

产品版本 (已过时)
.NET(Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8)
.NET Framework1.1 (2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1)
.NET Standard(2.0, 2.1)
Xamarin.iOS(10.8)
Xamarin.Mac(3.0)

?????????Thread.Suspend()和Thread.Resume()使用示例,可以参考作者的文章:

?????????C#的线程技术及操作(Thread类)-CSDN博客 ?https://blog.csdn.net/wenchm/article/details/134899365?spm=1001.2014.3001.5501

二、AutoResetEvent()和EventWaitHandle()

????????AutoResetEvent()和EventWaitHandle() 是上述方法被废弃后的替代方法。

1.AutoResetEvent()

????????表示线程同步事件在一个等待线程释放后收到信号时自动重置。 此类不能被继承。

????????命名空间:System.Threading

????????AutoResetEvent 类 (System.Threading) | Microsoft Learn ?https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.autoresetevent?view=net-8.0

2.EventWaitHandle()

?????????表示一个线程同步事件。

????????命名空间:System.Threading?

????????EventWaitHandle 类 (System.Threading) | Microsoft Learn ?https://learn.microsoft.com/zh-cn/dotnet/api/system.threading.eventwaithandle?view=net-8.0

3.示例及生成效果?

// 通过实例化Thread类对象创建一个新的线。
// 最后调用Start()方法启动该线程
using System.Threading;
namespace _02_1
{
    class Program
    {
        /// <summary>
        /// 用线程起始点的ThreadStart委托创建该线程的实例
        /// </summary>
        static void Main(string[] args)
        {
            Thread myThread;									//声明线程
            myThread = new Thread(new ThreadStart(CreateThread));
            myThread.Start();									//启动线程

            /*myThread.Suspend();		*/						//挂起线程,或者如果线程已挂起,则不起作用。 CS0618
            //myThread.Resume();							    //恢复/继续已挂起的线程。CS0618
            WorkerThread();                                    //挂起线程
            StartWorking();                                     //继续已挂起的线程
        }

        public static void CreateThread()
        {
            Console.Write("创建线程");
        }

        public static EventWaitHandle wh = new AutoResetEvent(false);
        private static void WorkerThread()
        {
            while (true)
            {
                wh.WaitOne();
                //Do work.
            }
        }

        public static void StartWorking()
        {
            wh.Set();
        }
    }
}
/*创建线程  */

文章来源:https://blog.csdn.net/wenchm/article/details/134914590
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。