本文主要详细介绍了ManualResetEvent在C#中的用法,具有一定的参考价值。感兴趣的朋友可以参考一下。
第一、简单介绍
ManualResetEvent允许线程通过信号相互通信。通常,这种通信涉及到一个线程必须在其他线程完成任务之前完成的任务。当一个线程启动一个活动时(该活动必须在其他线程可以启动之前完成),它调用Reset将ManualReseteEvent置于非终止状态。这个线程可以看作是控制ManualReseteEvent。在ManualResetEvent上调用WaitOne的线程将阻塞并等待信号。
当控制线程完成它的活动时,它调用Set来通知等待线程可以继续。并释放所有等待的线程。一旦终止,ManualResetEvent将保持终止状态(即调用WaitOne的线程将立即返回而不会阻塞),直到被手动重置。您可以通过向构造函数传递一个布尔值来控制ManualResetEvent的初始状态,
真实;如果初始状态处于终止状态;否则为假。
第二、代码演示
使用系统;
使用系统。集合。泛型;
使用系统。Linq
使用系统。文本;
使用系统。穿线;
使用系统。线程。任务;
命名空间控制台应用程序2
{
流言类
{
线程t=null
ManualResetEvent manual event=new ManualResetEvent(true);//是trur,可以从头执行。
私有无效运行()
{
while(真)
{
this . manual event . wait one();
控制台。WriteLine('线程ID: {0} ',Thread . current Thread . managed Thread);
线程。睡眠(2000);
}
}
公共void开始()
{
this . manual event . set();
}
公共无效站点()
{
this . manual event . reset();
}
public MyThread()
{
t=新线程(this。跑);
t.start();
}
}
班级计划
{
静态void Main(string[] args)
{
MyThread myt=new MyThread();
while(真)
{
控制台。WriteLine('输入stop后台线程以暂停start和start执行!');
string str=控制台。ReadLine();
如果(字符串。ToLower()。Trim()=='停止')
{
控制台。WriteLine('线程停止运行.\ n’);
myt。stop();
}
如果(字符串。ToLower()。Trim()=='start ')
{
控制台。WriteLine('线程已启动并正在运行.\ n’);
myt。start();
}
}
}
}
}
运行测试结果
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。