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

C# ManualResetEvent用法詳解

 更新時間:2019年12月11日 09:46:20   作者:陌客&  
這篇文章主要介紹了C# ManualResetEvent用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

ManualResetEvent表示線程同步事件,可以對所有進行等待的線程進行統(tǒng)一管理(收到信號時必須手動重置該事件)

其構造函數為:

public ManualResetEvent (bool initialState);

參數 initialState 表示是否初始化,如果為 true,則將初始狀態(tài)設置為終止(不阻塞);如果為 false,則將初始狀態(tài)設置為非終止(阻塞)。

注意:如果其參數設置為true,則ManualResetEvent等待的線程不會阻塞。 如果初始狀態(tài)為false, 則在Set調用方法之前, 將阻止線程。

它只有兩個方法

//將事件狀態(tài)設置為終止狀態(tài),從而允許繼續(xù)執(zhí)行一個或多個等待線程。
public bool Set ();

//將事件狀態(tài)設置為非終止,從而導致線程受阻。
public bool Reset ();

//返回值:操作成功返回true,否則false

講了這么多,看個例子理解一下

using System;
using System.Threading;

public class Example
{
  // mre is used to block and release threads manually. It is
  // created in the unsignaled state.
  private static ManualResetEvent mre = new ManualResetEvent(false);

  static void Main()
  {
    Console.WriteLine("\nStart 3 named threads that block on a ManualResetEvent:\n");

    for (int i = 0; i <= 2; i++)
    {
      Thread t = new Thread(ThreadProc);
      t.Name = "Thread_" + i;
      t.Start(); //開始線程
    }

    Thread.Sleep(500);
    Console.WriteLine("\nWhen all three threads have started, press Enter to call Set()" +
             "\nto release all the threads.\n");
    Console.ReadLine();

    mre.Set();

    Thread.Sleep(500);
    Console.WriteLine("\nWhen a ManualResetEvent is signaled, threads that call WaitOne()" +
             "\ndo not block. Press Enter to show this.\n");
    Console.ReadLine();

    for (int i = 3; i <= 4; i++)
    {
      Thread t = new Thread(ThreadProc);
      t.Name = "Thread_" + i;
      t.Start();
    }

    Thread.Sleep(500);
    Console.WriteLine("\nPress Enter to call Reset(), so that threads once again block" +
             "\nwhen they call WaitOne().\n");
    Console.ReadLine();

    mre.Reset();

    // Start a thread that waits on the ManualResetEvent.
    Thread t5 = new Thread(ThreadProc);
    t5.Name = "Thread_5";
    t5.Start();

    Thread.Sleep(500);
    Console.WriteLine("\nPress Enter to call Set() and conclude the demo.");
    Console.ReadLine();

    mre.Set();

    // If you run this example in Visual Studio, uncomment the following line:
    //Console.ReadLine();
  }


  private static void ThreadProc()
  {
    string name = Thread.CurrentThread.Name;

    Console.WriteLine(name + " starts and calls mre.WaitOne()");

    mre.WaitOne(); //阻塞線程,直到調用Set方法才能繼續(xù)執(zhí)行

    Console.WriteLine(name + " ends.");
  }
}

結果如下

過程:

該示例以信號狀態(tài)ManualResetEvent( false即傳遞給構造函數的) 開頭。 三個線程, 每個線程在調用其WaitOne方法時被阻止。 當用戶按Enter鍵時, 該示例調用Set方法, 該方法釋放所有三個線程,使其繼續(xù)執(zhí)行。

再次按 " enter " 鍵, 此時ManualResetEvent在調用Reset方法之前, 一直保持終止狀態(tài),因此這些線程在調用WaitOne方法時不會被阻止, 而是運行到完成。即對應上述(收到信號時必須手動重置該事件)

再次按enter鍵將導致該示例調用Reset方法, 并啟動一個線程, 該線程在調用WaitOne時將被阻止。 按enter鍵, 最后一次調用Set以釋放最后一個線程, 程序結束。

如果還不是很清楚可以進行單步調試,這樣就能明白了!

文章參考MSDN:ManualResetEvent Class

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C# AutoResetEvent的具體使用方法

    C# AutoResetEvent的具體使用方法

    AutoResetEvent是C#中的一個同步原語,用于在線程之間傳遞信號,本文主要介紹了C# AutoResetEvent的具體使用方法,具有一定的參考價值,感興趣的可以了解一下
    2025-01-01
  • C#實現SHP文件讀取與地圖顯示的完整教程

    C#實現SHP文件讀取與地圖顯示的完整教程

    在地理信息系統(tǒng)(GIS)開發(fā)中,SHP文件是一種常見的矢量數據格式,本文將詳細介紹如何使用C#讀取SHP文件并實現地圖顯示功能,包括坐標轉換、圖形渲染、平移縮放操作以及屬性表展示,需要的朋友可以參考下
    2025-09-09
  • C#添加、獲取、刪除PDF附件實例代碼

    C#添加、獲取、刪除PDF附件實例代碼

    這篇文章主要介紹了如何在C#添加、獲取、刪除PDF附件,文中代碼非常詳細,快來和小編一起學習吧
    2020-05-05
  • C#使用自定義算法對數組進行反轉操作的方法

    C#使用自定義算法對數組進行反轉操作的方法

    這篇文章主要介紹了C#使用自定義算法對數組進行反轉操作的方法,涉及C#針對數組操作的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04
  • C#實現拷貝文件到另一個文件夾下

    C#實現拷貝文件到另一個文件夾下

    這篇文章主要介紹了C#實現拷貝文件到另一個文件夾下,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C# 9 中新加入的關鍵詞 init,record,with

    C# 9 中新加入的關鍵詞 init,record,with

    這篇文章主要介紹了C# 9 中新加入的關鍵詞 init,record,with的相關資料,幫助大家更好的理解和學習c# 9,感興趣的朋友可以了解下
    2020-08-08
  • 詳解Unity 實現語音識別功能

    詳解Unity 實現語音識別功能

    語言識別功能已經在我們身邊普遍流行起來,在unity開發(fā)中語音識別也非?;馃?,今天就介紹下Unity自帶的語音識別功能的實現,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • C#實現動態(tài)數字時鐘和日歷

    C#實現動態(tài)數字時鐘和日歷

    這篇文章主要為大家詳細介紹了C#實現動態(tài)數字時鐘和日歷的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • C#基礎之異步調用實例教程

    C#基礎之異步調用實例教程

    這篇文章主要介紹了C#中的異步調用,對比同步調用分析了異步調用的原理及特點,并以實例形式給出了實現方法,需要的朋友可以參考下
    2014-09-09
  • C#畫筆Pen保存和恢復圖形對象的設置方法

    C#畫筆Pen保存和恢復圖形對象的設置方法

    這篇文章主要介紹了C#畫筆Pen保存和恢復圖形對象的設置方法,實例分析了畫筆的保存save及恢復屬性Restore的相關使用技巧,需要的朋友可以參考下
    2015-06-06

最新評論

甘谷县| 丰城市| 疏勒县| 岑巩县| 分宜县| 荃湾区| 吉水县| 清远市| 兰西县| 南乐县| 潼关县| 饶阳县| 东乌珠穆沁旗| 巴楚县| 吕梁市| 磴口县| 福州市| 光山县| 永新县| 阜平县| 陵水| 同仁县| 江孜县| 大荔县| 什邡市| 乐都县| 同心县| 和田市| 司法| 老河口市| 新晃| 长葛市| 吉林市| 东台市| 宁蒗| 余江县| 凯里市| 贵南县| 石楼县| 吉木乃县| 弋阳县|