vb.net - 如何取消线程?
问题描述
我在一个线程中做某事。但有时我不想等到所有 ping 都完成。
如何取消线程?
你能告诉我代码吗?
Private Sub Start_Button_Click(sender As Object, e As EventArgs) Handles Start_Button.Click
DoSomething()
End Sub
Private Sub Cancel_Button_Click(sender As Object, e As EventArgs) Handles Cancel_Button.Click
THRD.Cancel '<-- Thread cancel!??!???
End Sub
Sub DoSomething()
Dim THRD As New Thread(Sub()
Dim IPArea As String = "192.168.1."
Dim LastIP As Integer
For LastIP = 0 To 255
Dim TestIP As String = IPArea & CStr(LastIP)
If My.Computer.Network.Ping(TestIP, 10) Then
ListBox1.Items.Add(TestIP)
End If
Next
End Sub)
THRD.IsBackground = True
THRD.Start()
End Sub
解决方案
这是我的工作解决方案,该解决方案仅展示如何将其THRD
作为表单级别变量移动以允许在单击取消按钮时停止它。我添加了一些验证来防止异常。
Public Class Form1
Private THRD As Threading.Thread
Private Sub Start_Button_Click(sender As Object, e As EventArgs) Handles Start_Button.Click
DoSomething()
End Sub
Private Sub Cancel_Button_Click(sender As Object, e As EventArgs) Handles Cancel_Button.Click
If THRD IsNot Nothing AndAlso THRD.IsAlive Then
THRD.Abort() '<-- Thread cancel!??!???
THRD = Nothing
AddToList("Stopped.")
Else
AddToList("Thread not running.")
End If
End Sub
Sub DoSomething()
If THRD IsNot Nothing AndAlso THRD.IsAlive Then
AddToList("Still working...")
Exit Sub
End If
THRD = New Threading.Thread(Sub()
Dim IPArea As String = "192.168.1."
Dim LastIP As Integer
For LastIP = 0 To 255
Dim TestIP As String = IPArea & CStr(LastIP)
If My.Computer.Network.Ping(TestIP, 10) Then
AddToList(TestIP)
End If
Next
AddToList("Done")
End Sub)
THRD.IsBackground = True
THRD.Start()
End Sub
''' <summary>
''' Thead-safe add value to list.
''' </summary>
''' <param name="value">The value.</param>
Private Sub AddToList(value As String)
If ListBox1.InvokeRequired Then
ListBox1.Invoke(Sub() ListBox1.Items.Add(value))
Else
ListBox1.Items.Add(value)
End If
End Sub
End Class
推荐阅读
- python - 下载带有证书和密钥的 Web 文件
- firebase - firebase 安全规则,将防止更新或删除现有节点
- c# - C# Blazor 客户端从 url 读取哈希参数
- spring - 在 Spring Boot 中读取 mongoUri replicationSet 配置时出错
- bash - 如果它调用的脚本产生错误,如何中断 shell 脚本
- maps - 如何在QGIS中修改属性表
- c++ - 在不知道所需结构大小的情况下使用结构数据结构读取 .txt 文件
- r - pvclust 可以组合的不是变量,而是 obs。在 R 中
- coinbase-api - Coinbase Websocket,身份验证中的签名
- php - Laravel 5:如何使用 'where' 或 'orderBy' 使用 eloquent?