📄 module1.vb
字号:
Imports System.Threading
Module Module1
Sub Main()
Dim FirstThread As Thread
Dim SecondThread As Thread
'显示用法说明
Console.WriteLine("主线程开始运行!")
Console.WriteLine()
Console.WriteLine()
Console.WriteLine("按回车键开始创建线程并启动!")
Console.ReadLine()
Console.WriteLine("按 1 键并回车切换第1个线程的状态!")
Console.WriteLine("按 2 键并回车切换第2个线程的状态!")
Console.WriteLine("按 q 键并回车退出主线程循环,主线程将终止两个线程!")
'创建并启动线程
Try
'创建第一个线程
Console.WriteLine("创建并启动两个线程!")
Console.WriteLine()
Dim firstWork As New ThreadOneWork()
FirstThread = New Thread(AddressOf firstWork.DoWork)
'普通优先级
FirstThread.Priority = ThreadPriority.Normal
'创建第一个线程
Dim secondWork As New ThreadTwoWork()
SecondThread = New Thread(AddressOf secondWork.DoWork)
'普通优先级
FirstThread.Priority = ThreadPriority.Normal
'启动线程
FirstThread.Start()
SecondThread.Start()
Catch e As Exception
Console.WriteLine(e.ToString())
End Try
While True
Console.WriteLine("主线程运行!")
'输入数据
Dim ch As String
ch = Console.ReadLine()
'退出循环
If ch = "q" Then
Console.WriteLine("退出主线程循环,主线程终止两个线程!")
Exit While
'切换第一个线程状态
ElseIf ch = "1" Then
If Not FirstThread Is "" Then
'如果处于运行状态则挂起
If FirstThread.ThreadState = ThreadState.Running Then
Console.WriteLine("挂起第一个线程!")
FirstThread.Suspend()
'如果处于挂起状态则继续
ElseIf FirstThread.ThreadState = ThreadState.Suspended Then
Console.WriteLine("继续第一个线程!")
FirstThread.Resume()
End If
End If
'切换第二个线程状态
ElseIf ch = "2" Then
If Not SecondThread Is "" Then
'如果处于运行状态则挂起
If SecondThread.ThreadState = ThreadState.Running Then
Console.WriteLine("挂起第二个线程!")
SecondThread.Suspend()
'如果处于挂起状态则继续
ElseIf SecondThread.ThreadState = ThreadState.Suspended Then
Console.WriteLine("继续第二个线程!")
SecondThread.Resume()
End If
End If
End If
End While
Console.WriteLine("终止第一个线程...")
'终止第1个线程
If (Not FirstThread Is "") And FirstThread.IsAlive Then
'必须处于IsAlive状态才有可能被Abort
'如果线程当前处在Suspended状态下,则需要Resume该线程,然后才能Abort。
If FirstThread.ThreadState = ThreadState.Suspended Then
FirstThread.Resume()
End If
FirstThread.Abort()
'让FirstThread和主线程连接起来,主线程将会一直等到FirstThread结束才继续执行代码
'这样可防止主线程结束了而工作者线程没有结束的情况。
FirstThread.Join()
End If
Console.WriteLine("终止第二个线程...")
'终止第2个线程
If (Not SecondThread Is "") And SecondThread.IsAlive Then
If SecondThread.ThreadState = ThreadState.Suspended Then
SecondThread.Resume()
End If
SecondThread.Abort()
SecondThread.Join()
End If
End Sub
End Module
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -