C#中ManualResetEvent⽤法详解
第⼀、简单介绍
ManualResetEvent 允许线程通过发信号互相通信。通常,此通信涉及⼀个线程在其他线程进⾏之前必须完成的任务。当⼀个线程开始⼀个活动(此活动必须完成后,其他线程才能开始)时,它调⽤ Reset 以将 ManualResetEvent 置于⾮终⽌状态,此线程可被视为控制 ManualResetEvent。调⽤ ManualResetEvent 上的 WaitOne 的线程将阻⽌,并等待信号。
当控制线程完成活动时,它调⽤ Set 以发出等待线程可以继续进⾏的信号。并释放所有等待线程。⼀旦它被终
⽌,ManualResetEvent 将保持终⽌状态(即对 WaitOne 的调⽤的线程将⽴即返回,并不阻塞),直到它被⼿动重置。可以通过将布尔值传递给构造函数来控制 ManualResetEvent 的初始状态,
如果初始状态处于终⽌状态,为 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,⼀开始就可以执⾏
private void Run()
{
while (true)
{
this.manualEvent.WaitOne();
Console.WriteLine("线程id:{0}", Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(2000);
}
}
public void Start()writeline教程
{
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 后台线程挂起 start 开始执⾏!");
string str = Console.ReadLine();
if (str.ToLower().Trim() == "stop")
{
Console.WriteLine("线程停⽌运⾏...\n");
myt.Stop();
}
if (str.ToLower().Trim() == "start")
{
Console.WriteLine("线程开启运⾏...\n");
myt.Start();
}
}
}
}
}
运⾏测试结果
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论