溫馨提示×

C#中ManualResetEvent用法總結

c#
小云
181
2023-09-13 06:36:43
欄目: 編程語言

ManualResetEvent是C#中的一個線程同步原語,用于在多線程環境下進行線程間的同步與通信。以下是對ManualResetEvent的用法總結:

  1. 創建ManualResetEvent對象:
ManualResetEvent mre = new ManualResetEvent(false);

可以通過構造函數指定初始狀態,false表示事件為非終止狀態,true表示事件為終止狀態。

  1. 等待事件的發生:
mre.WaitOne();

當事件為非終止狀態時,調用WaitOne方法會使當前線程阻塞,直到事件被其他線程設置為終止狀態。

  1. 設置事件為終止狀態:
mre.Set();

調用Set方法將事件設置為終止狀態,所有阻塞在WaitOne方法上的線程將被喚醒繼續執行。

  1. 重置事件為非終止狀態:
mre.Reset();

調用Reset方法將事件重置為非終止狀態,以便后續的WaitOne方法可以再次阻塞線程。

  1. 超時等待事件的發生:
mre.WaitOne(timeout);

可以通過WaitOne方法的重載形式指定超時時間,如果在超時時間內事件仍未發生,WaitOne方法會返回false。

  1. 判斷事件狀態:
bool signaled = mre.WaitOne(0);

可以通過WaitOne方法的重載形式指定超時時間為0,此時WaitOne方法會立即返回,返回值表示事件的當前狀態。

  1. 使用WaitHandle.WaitAll和WaitHandle.WaitAny等待多個事件的發生:
WaitHandle.WaitAll(handles); // 等待所有事件都發生
WaitHandle.WaitAny(handles); // 等待任意一個事件發生

可以通過WaitHandle的靜態方法WaitAll和WaitAny來等待多個事件的發生。

需要注意的是,ManualResetEvent是一個信號量,它只能由其他線程設置為終止狀態,而不能自動恢復為非終止狀態。如果需要自動恢復為非終止狀態,可以考慮使用AutoResetEvent。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女