// 版权所有 (C) Microsoft Corporation。保留所有权利。
using System;
using System.Threading;
using System.Collections;
using System.Collections.Generic;
// 将线程同步事件封装在此类中,
// 以便于将这些事件传递给 Consumer 和
// Producer 类。
public class SyncEvents
{
public SyncEvents()
{
// AutoResetEvent 用于“新项”事件,因为
// 我们希望每当使用者线程响应此事件时,
// 此事件就会自动重置。
_newItemEvent = new AutoResetEvent(false);
// ManualResetEvent 用于“退出”事件,因为
// 我们希望发出此事件的信号时有多个线程响应。
// 如果使用 AutoResetEvent,事件
// 对象将在单个线程作出响应之后恢复为
// 未发信号的状态,而其他线程将
// 无法终止。
_exitThreadEvent = new ManualResetEvent(false);
// 这两个事件也放在一个 WaitHandle 数组中,以便
// 使用者线程可以使用 WaitAny 方法
// 阻塞这两个事件。
_eventArray = new WaitHandle[2];
_eventArray[0] = _newItemEvent;
_eventArray[1] = _exitThreadEvent;
}
c#线程同步和交互
最新推荐文章于 2018-07-09 23:36:50 发布
该示例展示了如何在 C# 中使用线程同步事件,包括 AutoResetEvent 和 ManualResetEvent。Producer 类异步添加项到队列,Consumer 类消费队列中的项。主线程控制生产者和消费者的运行,并在指定时间间隔显示队列内容。
摘要由CSDN通过智能技术生成