📄 frmresetevent.vb
字号:
Imports Microsoft.VisualBasic
Imports System
Imports System.Collections.Generic
Imports System.Windows.Forms
Imports System.Threading
Imports System.Diagnostics
Namespace CodeForChapter11cs
Partial Public Class frmResetEvent
Inherits Form
Public Sub New()
InitializeComponent()
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles button1.Click
Dim t1 As Thread = New Thread(AddressOf Me.AddFirstAndLast2)
t1.Name = "Worker Thread 1 "
Dim t2 As Thread = New Thread(AddressOf Me.AddMiddle2AndMessage)
t2.Name = "Worker Thread 2 "
t1.Start()
t2.Start()
End Sub
#Region "ManualResetEvent"
Private l As List(Of Long) = New List(Of Long)(10)
Private mre1 As ManualResetEvent = New ManualResetEvent(False)
Private mre2 As ManualResetEvent = New ManualResetEvent(False)
Private Sub 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.")
End Sub
Private Sub 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()
End Sub
#End Region
End Class
End Namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -