⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmresetevent.vb

📁 清华大学出版社出版的 移动应用开发宝典 张大威(2008)的附书源代码
💻 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 + -