最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中EventWaitHandle的用法小結

 更新時間:2025年04月15日 10:22:56   作者:wangnaisheng  
EventWaitHandle是C#中用于線程間同步的一個類,它提供了對共享資源的訪問控制,以及線程間的同步機制,本文就來介紹一下EventWaitHandle用法,具有一定的參考價值,感興趣的可以了解一下

EventWaitHandle 是 C# 中用于線程間同步的一個類,它提供了對共享資源的訪問控制,以及線程間的同步機制。EventWaitHandle 類位于 System.Threading 命名空間下,主要用于實現(xiàn)互斥訪問、信號量控制等場景。

創(chuàng)建 EventWaitHandle

創(chuàng)建一個 EventWaitHandle 需要指定兩個參數(shù):初始狀態(tài)和重置模式。

using System.Threading;

// 創(chuàng)建一個初始狀態(tài)為未設置的自動重置事件
EventWaitHandle autoEvent = new EventWaitHandle(false, EventResetMode.AutoReset);

// 創(chuàng)建一個初始狀態(tài)為設置的自動重置事件
EventWaitHandle manualEvent = new EventWaitHandle(true, EventResetMode.ManualReset);

使用 EventWaitHandle

設置和重置事件

  • Set(): 當事件被設置時,所有等待該事件的線程都將被釋放。
  • Reset(): 將事件的狀態(tài)重置為未設置狀態(tài)。

對于 AutoReset 類型的 EventWaitHandle,一旦設置狀態(tài)被觸發(fā)后會立即重置回未設置狀態(tài)。而 ManualReset 類型則需要顯式地調(diào)用 Reset() 方法來重置事件。

manualEvent.Reset();
將manualEvent的狀態(tài)重置為未設置(即信號量為假)。這通常意味著任何正在等待該事件的線程將繼續(xù)等待。
對于ManualReset類型的EventWaitHandle,這是必須的;否則,即使已經(jīng)調(diào)用了Set()方法,等待中的線程也不會被喚醒。
manualEvent.Set();
將manualEvent的狀態(tài)設置為已設置(即信號量為真)。如果有任何線程正在等待這個事件,那么它們將不再等待并繼續(xù)執(zhí)行。
對于ManualReset類型的EventWaitHandle,狀態(tài)需要手動重置才能再次等待。

manualEvent.Set(); // 手動設置事件
manualEvent.Reset(); // 手動重置事件

等待事件

  • WaitOne(): 使調(diào)用線程進入等待狀態(tài),直到事件被設置或者超時(如果指定了超時時間)。
autoEvent.WaitOne(); // 無限期等待事件被設置
bool result = autoEvent.WaitOne(5000); // 在5秒鐘內(nèi)等待事件被設置

如果寫為 WaitOne(-1) 表示會使當前線程阻塞,直到manualEvent被設置(即信號量變?yōu)檎妫?br />-1表示無限期地等待下去,直到事件被設置。如果想指定一個等待的超時時間,可以使用毫秒值作為參數(shù)。

示例

這里提供一個簡單的例子來展示 EventWaitHandle 的基本用法:

using System;
using System.Threading;

class Program
{
    static void Main()
    {
        EventWaitHandle eventWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);

        Thread thread = new Thread(() =>
        {
            Console.WriteLine("Thread is waiting for the signal.");
            eventWaitHandle.WaitOne(); // 線程等待信號
            Console.WriteLine("Thread received the signal and continues execution.");
        });

        thread.Start();

        Thread.Sleep(2000); // 主線程等待兩秒后發(fā)送信號
        Console.WriteLine("Main thread signals the waiting thread.");

        eventWaitHandle.Set(); // 發(fā)送信號
        eventWaitHandle.Close(); // 關閉事件句柄
    }
}

在這個例子中,我們創(chuàng)建了一個手動重置類型的 EventWaitHandle 并在線程中等待信號。主線程等待兩秒后發(fā)送信號給等待的線程。當信號被發(fā)送后,等待的線程繼續(xù)執(zhí)行。注意,在使用完畢之后,應該關閉 EventWaitHandle。

注意事項

  • EventWaitHandle 可以是命名的,這意味著它可以跨進程使用,但示例中沒有展示這一點。
  • 如果使用命名的 EventWaitHandle,請確保正確處理互斥和權限問題。
  • 在使用完 EventWaitHandle 后,應當調(diào)用 Close() 方法來釋放資源。

到此這篇關于C#中EventWaitHandle的用法小結的文章就介紹到這了,更多相關C# EventWaitHandle內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • C#?wpf?通過HwndHost渲染視頻的實現(xiàn)方法

    C#?wpf?通過HwndHost渲染視頻的實現(xiàn)方法

    日常開發(fā)中,特別是音視頻開發(fā),需要在界面上渲染視頻,比如制作一個播放器、或者視頻編輯工具、以及視頻會議客戶端。通常拿到的是像素格式數(shù)據(jù),此時需要渲染到wpf窗口上就需要一定的方法,本文介紹一種通過hwnd渲染的方法,控件既能提供hwnd又能嵌入wpf窗口里
    2021-11-11
  • 基于C#實現(xiàn)俄羅斯方塊游戲

    基于C#實現(xiàn)俄羅斯方塊游戲

    這篇文章主要為大家詳細介紹了基于C#實現(xiàn)俄羅斯方塊游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • C# NullReferenceException解決案例講解

    C# NullReferenceException解決案例講解

    這篇文章主要介紹了C# NullReferenceException解決案例講解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C#之List集合去重復對象的實現(xiàn)方法

    C#之List集合去重復對象的實現(xiàn)方法

    這篇文章主要介紹了C#之List集合去重復對象的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • C#簡單實現(xiàn)在網(wǎng)頁上發(fā)郵件的案例

    C#簡單實現(xiàn)在網(wǎng)頁上發(fā)郵件的案例

    本文分享一個C#利用SMTP發(fā)送郵件的案例,提供了前后臺代碼,方便大家學習。
    2016-03-03
  • C#特性之匿名方法和Lambda表達式

    C#特性之匿名方法和Lambda表達式

    這篇文章主要介紹了C#特性之匿名方法和Lambda表達式,需要的朋友可以參考下
    2014-12-12
  • C#讀寫txt文件的2種方法

    C#讀寫txt文件的2種方法

    這篇文章主要為大家詳細介紹了C#讀寫txt文本文檔數(shù)據(jù)的2種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 關于C#中使用Oracle存儲過程返回結果集的問題

    關于C#中使用Oracle存儲過程返回結果集的問題

    Oracle中可以使用游標(Cursor)對數(shù)據(jù)集進行操作,但在存儲過程輸出參數(shù)中直接使用Cursor錯誤,下面小編給大家?guī)砹薈#中使用Oracle存儲過程返回結果集的問題,感興趣的朋友一起看看吧
    2021-10-10
  • Unity自定義編輯器界面(Inspector界面)

    Unity自定義編輯器界面(Inspector界面)

    這篇文章主要為大家詳細介紹了Unity自定義編輯器界面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • .Net筆記:System.IO之Stream的使用詳解

    .Net筆記:System.IO之Stream的使用詳解

    本篇文章是對.Net中System.IO之Stream的使用進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

都昌县| 义马市| 芦山县| 时尚| 黄山市| 中宁县| 吉木乃县| 滁州市| 沽源县| 沙河市| 琼海市| 新野县| 黑水县| 富阳市| 聂拉木县| 宜川县| 孟津县| 大厂| 临清市| 天祝| 福州市| 曲麻莱县| 鲁甸县| 法库县| 万安县| 台北县| 开鲁县| 姜堰市| 鲁山县| 胶州市| 沅江市| 昭苏县| 环江| 青冈县| 东台市| 济宁市| 潼南县| 册亨县| 安化县| 会同县| 巫山县|