加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[VB.NET]多线程——取消任务

发布时间:2020-12-16 23:59:23 所属栏目:大数据 来源:网络整理
导读:多线程的一个优点是,应用程序的用户界面部分始终可以作出响应,即使其他线程正在执行任务。同步事件和作为标志的字段通常用于通知其他线程停止。以下示例使用同步事件来取消任务。要使用本示例,请在项目中添加以下模块。要启动线程,请调用 StartCancel.St

多线程的一个优点是,应用程序的用户界面部分始终可以作出响应,即使其他线程正在执行任务。同步事件和作为标志的字段通常用于通知其他线程停止。以下示例使用同步事件来取消任务。要使用本示例,请在项目中添加以下模块。要启动线程,请调用 StartCancel.StartTask() 方法。要取消一个或多个正在运行的线程,请调用 StartCancel.CancelTask() 方法。

Module StartCancel
Public CancelThread As New System.Threading.ManualResetEvent(False)
Public ThreadisCanceled As New System.Threading.ManualResetEvent(False)
Private Sub SomeLongTask()
Dim LoopCount As Integer
Dim Loops As Integer = 10
' 在 While 循环中运行 10 秒钟代码,或者
' 直至设置了 CancelThread。
While Not CancelThread.WaitOne(0,False) And LoopCount < Loops
' 此处执行某种类型的任务。
System.Threading.Thread.Sleep(1000) ' 休眠 1 秒钟。
LoopCount += 1
End While
If CancelThread.WaitOne(0,False) Then
' 确认设置了 ManualResetEvent CancelThread。
ThreadisCanceled.Set()
MsgBox("取消线程")
Else
MsgBox("线程运行结束")
End If
End Sub

Public Sub StartTask()
' 启动新线程。
Dim th As New System.Threading.Thread(AddressOf SomeLongTask)
CancelThread.Reset()
ThreadisCanceled.Reset()
th.Start()
MsgBox("线程已启动")
End Sub

Public Sub CancelTask() ' 停止任何由 StartTask 过程启动的线程。 ' 注意,此线程同时接收和发送 ' 同步事件以协调线程操作。 CancelThread.Set() ' 设置 CancelThread 以通知线程停止。 If ThreadisCanceled.WaitOne(4000,False) Then ' 最多等待 4 秒钟,以便线程 ' 确认它已经停止。 MsgBox("线程已停止。") Else MsgBox("线程无法停止。") End If End SubEnd Module

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读