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

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

<script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

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 Sub
End Module

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值