C#中ManualResetEvent用法詳解
第一、簡(jiǎn)單介紹
ManualResetEvent 允許線程通過(guò)發(fā)信號(hào)互相通信。通常,此通信涉及一個(gè)線程在其他線程進(jìn)行之前必須完成的任務(wù)。當(dāng)一個(gè)線程開(kāi)始一個(gè)活動(dòng)(此活動(dòng)必須完成后,其他線程才能開(kāi)始)時(shí),它調(diào)用 Reset 以將 ManualResetEvent 置于非終止?fàn)顟B(tài),此線程可被視為控制 ManualResetEvent。調(diào)用 ManualResetEvent 上的 WaitOne 的線程將阻止,并等待信號(hào)。
當(dāng)控制線程完成活動(dòng)時(shí),它調(diào)用 Set 以發(fā)出等待線程可以繼續(xù)進(jìn)行的信號(hào)。并釋放所有等待線程。一旦它被終止,ManualResetEvent 將保持終止?fàn)顟B(tài)(即對(duì) WaitOne 的調(diào)用的線程將立即返回,并不阻塞),直到它被手動(dòng)重置??梢酝ㄟ^(guò)將布爾值傳遞給構(gòu)造函數(shù)來(lái)控制 ManualResetEvent 的初始狀態(tài),
如果初始狀態(tài)處于終止?fàn)顟B(tài),為 true;否則為 false。

第二、代碼演示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class MyThread
{
Thread t = null;
ManualResetEvent manualEvent = new ManualResetEvent(true);//為trur,一開(kāi)始就可以執(zhí)行
private void Run()
{
while (true)
{
this.manualEvent.WaitOne();
Console.WriteLine("線程id:{0}", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
}
}
public void Start()
{
this.manualEvent.Set();
}
public void Stop()
{
this.manualEvent.Reset();
}
public MyThread()
{
t = new Thread(this.Run);
t.Start();
}
}
class Program
{
static void Main(string[] args)
{
MyThread myt = new MyThread();
while (true)
{
Console.WriteLine("輸入 stop 后臺(tái)線程掛起 start 開(kāi)始執(zhí)行!");
string str = Console.ReadLine();
if (str.ToLower().Trim() == "stop")
{
Console.WriteLine("線程停止運(yùn)行...\n");
myt.Stop();
}
if (str.ToLower().Trim() == "start")
{
Console.WriteLine("線程開(kāi)啟運(yùn)行...\n");
myt.Start();
}
}
}
}
}
運(yùn)行測(cè)試結(jié)果

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C#四舍五入MidpointRounding.AwayFromZero解析
這篇文章主要介紹了C#四舍五入MidpointRounding.AwayFromZero,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
C#中哈希表(HashTable)用法實(shí)例詳解(添加/移除/判斷/遍歷/排序等)
這篇文章主要介紹了C#中哈希表(HashTable)用法,簡(jiǎn)單講述了哈希表的原理并結(jié)合實(shí)例形式詳細(xì)分析了C#針對(duì)哈希表進(jìn)行添加、移除、判斷、遍歷、排序等操作的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-06-06
C#中DateTime的時(shí)間加減法操作小結(jié)
本文主要介紹了C#中DateTime的時(shí)間加減法操作小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
C#實(shí)現(xiàn)EPL?II格式打印與打印測(cè)試
這篇文章介紹了C#實(shí)現(xiàn)EPL?II格式打印與打印測(cè)試的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06
C#用RabbitMQ實(shí)現(xiàn)消息訂閱與發(fā)布
在消息隊(duì)列模型中,如何將消息廣播到所有的消費(fèi)者,這種模式成為“發(fā)布/訂閱”。本文主要以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述通過(guò)fanout交換機(jī),實(shí)現(xiàn)消息的發(fā)布與訂閱,僅供學(xué)習(xí)分享使用,如有不足之處,還請(qǐng)指正。2021-05-05
詳解C#如何計(jì)算一個(gè)實(shí)例占用多少內(nèi)存
我們都知道CPU和內(nèi)存是程序最為重要的兩類指標(biāo),那么有多少人真正想過(guò)一個(gè)類型的實(shí)例在內(nèi)存中究竟占多少字節(jié),本文就來(lái)用C#計(jì)算一下一個(gè)實(shí)例占用多少內(nèi)存吧2023-06-06

