Den*_*nis 1 .net vb.net multithreading threadpool
我正在编写一个代码,它将创建一系列线程(例如:) Function GetMACAddress(IPAddr as string) as string.每个线程作业将花费不同的执行时间来处理(如果IP没有被任何PC占用并且最终将返回没有有效的MAC地址,则将花费更长的时间).
如何以这样的方式管理和监视每个线程,以便在指定的超时时间(例如Timeout = 100ms)之后仍然可以完成时,我可以随时停止/中止?在我的情况下,我需要从192.168.1.1扫描到192.168.1.255
我应该在这里使用什么样的线程编码架构?
请尝试以下代码
Imports System
Public Class TimedThread
Dim WithEvents Timer1 As Timers.Timer
Dim Thread1 As Threading.Thread
Dim Timeout1 As Integer
Sub New(ByVal Timeout1 As Integer, ByVal ThreadStart1 As Threading.ThreadStart)
Me.Timeout1 = Timeout1
If Timeout1 > 0 Then
Timer1 = New Timers.Timer(Timeout1)
End If
Thread1 = New Threading.Thread(ThreadStart1)
End Sub
Public Sub Start()
If Not Thread1 Is Nothing Then
Thread1.Start()
End If
If Timeout1 > 0 Then
Timer1.Enabled = True
End If
End Sub
Private Sub Timer1_Elapsed() Handles Timer1.Elapsed
If Thread1.ThreadState = Threading.ThreadState.Running Then
Thread1.Abort()
Timer1.Enabled = False
'Remove this line after testing
MsgBox("Thread aborted")
End If
End Sub
Public Sub Dispose()
If Not Timer1 Is Nothing Then
If Thread1.ThreadState = Threading.ThreadState.Running Then
Thread1.Abort()
End If
Timer1.Dispose()
End If
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
要测试代码,请在表单中添加这些行
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim Timeout1 As Integer = 1000
Dim TimedThread1 As New TimedThread(Timeout1, AddressOf TestSub)
TimedThread1.Start()
End Sub
Private Sub TestSub()
Dim i, a As Integer
For i = 0 To 1000000000
a += 1
Next
MsgBox("Operation complete")
End Sub
Run Code Online (Sandbox Code Playgroud)
此演示适用于单个线程.如果要使用多个线程,请使用TimedThread类的数组.
要将IP地址设置为输入参数并将MAC地址作为返回值,可以使用以下方法.
Public Structure NetInfo
Dim IP_Address As String
Dim MAC_Address As String
Sub New(ByVal IP_Address As String, ByVal MAC_Address As String)
Me.IP_Address = IP_Address
Me.MAC_Address = MAC_Address
End Sub
End Structure
Private Event ReturnValues(ByVal ReturnInfo1 As NetInfo)
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim Timeout1 As Integer = 0
Dim TimedThread1 As New TimedThread(Timeout1, Sub() GetMacAddress("192.168.0.1"))
TimedThread1.Start()
End Sub
Private Sub GetMacAddress(ByVal IP_Address1 As String)
'Processes for getting the MAC address based on the IP address.
'
'
Dim MAC_Address1 As String = "Test return value"
Dim ReturnInfo1 As New NetInfo(IP_Address1, MAC_Address1)
RaiseEvent ReturnValues(ReturnInfo1)
End Sub
Private Sub ThreadReturnValues(ByVal ReturnInfo1 As NetInfo) Handles Me.ReturnValues
MsgBox("IP = " & ReturnInfo1.IP_Address & " MAC = " & ReturnInfo1.MAC_Address)
End Sub
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15913 次 |
| 最近记录: |