📄 frmresetevent.cs
字号:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
namespace CodeForChapter11cs
{
public partial class frmResetEvent : Form
{
public frmResetEvent()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Thread t1 = new Thread(this.AddFirstAndLast2);
t1.Name = "Worker Thread 1 ";
Thread t2 = new Thread(this.AddMiddle2AndMessage);
t2.Name = "Worker Thread 2 ";
t1.Start();
t2.Start();
}
#region ManualResetEvent
List<long> l = new List<long>(10);
ManualResetEvent mre1 = new ManualResetEvent(false);
ManualResetEvent mre2 = new ManualResetEvent(false);
private void AddFirstAndLast2()
{
Thread.Sleep(500); //give the other one a head start, makes no difference
Debug.WriteLine(Thread.CurrentThread.Name + " is running");
l.Add(1);
l.Add(2);
// tell the other thread to do its job and wait for it to tell us
Debug.WriteLine(Thread.CurrentThread.Name + " signals and waits");
mre2.Set();
mre1.WaitOne(); //blocks here
mre1.Reset();
Debug.WriteLine(Thread.CurrentThread.Name + " is running");
l.Add(5);
l.Add(6);
Debug.WriteLine(Thread.CurrentThread.Name + " signals and waits");
mre2.Set();
mre1.WaitOne(); // could also have been t2.Join() if t2 is available
mre1.Reset(); //superflouus
Debug.WriteLine(Thread.CurrentThread.Name + " is running and ends.");
}
private void AddMiddle2AndMessage()
{
// wait for other thread to do its first set
Debug.WriteLine(Thread.CurrentThread.Name + " about to wait");
mre2.WaitOne(); //blocks here
mre2.Reset();
Debug.WriteLine(Thread.CurrentThread.Name + " is running");
l.Add(3);
l.Add(4);
// tell it we are done and wait again
Debug.WriteLine(Thread.CurrentThread.Name + " signals and waits");
mre1.Set();
mre2.WaitOne();
mre2.Reset();
Debug.WriteLine(Thread.CurrentThread.Name + " is running and breaks in debugger");
Debugger.Break();
Debug.WriteLine(Thread.CurrentThread.Name + " ends. You hit F5.");
mre1.Set();
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -