Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# autoresetevent

作者:满身补丁   发布日期:2025-08-27   浏览:34

using System;
using System.Threading;

class Program
{
    // 定义一个 AutoResetEvent 对象,初始状态为未触发 (false)
    private static AutoResetEvent autoEvent = new AutoResetEvent(false);

    static void Main()
    {
        // 启动一个线程来执行等待事件的任务
        Thread thread = new Thread(DoWork);
        thread.Start();

        // 模拟主线程做其他工作
        Console.WriteLine("主线程正在工作...");
        Thread.Sleep(2000);

        // 触发事件,通知等待的线程继续执行
        Console.WriteLine("主线程触发事件...");
        autoEvent.Set();

        // 等待子线程完成
        thread.Join();
        Console.WriteLine("所有任务已完成。");
    }

    static void DoWork()
    {
        // 等待事件被触发
        Console.WriteLine("子线程等待事件...");
        autoEvent.WaitOne();

        // 事件被触发后,继续执行
        Console.WriteLine("子线程收到事件通知,继续执行...");
    }
}

解释说明:

  1. AutoResetEvent 是一个同步原语,用于在多线程环境中进行线程间的通信。它有两种状态:触发(signaled)和未触发(nonsignaled)。当某个线程调用 WaitOne() 方法时,如果事件处于未触发状态,该线程会被阻塞,直到事件被触发。

  2. 构造函数 new AutoResetEvent(false) 创建了一个初始状态为未触发的 AutoResetEvent 对象。参数为 true 则表示初始状态为已触发。

  3. Set() 方法用于将事件设置为触发状态,允许等待的线程继续执行。

  4. WaitOne() 方法使当前线程进入等待状态,直到事件被触发。一旦事件被触发,线程会继续执行,而事件会自动重置为未触发状态(因此称为 "AutoResetEvent")。

  5. 在这个示例中,子线程通过 WaitOne() 等待事件被触发,而主线程通过 Set() 触发事件,通知子线程继续执行。

上一篇:delegate c#

下一篇:c# byte转string

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

c#网络编程

c# rectangle

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站