多线程,同时取消(转自网络)

本文介绍了一种使用ManualResetEvent来控制线程运行与取消的方法。通过设置和重置ManualResetEvent对象,主线程可以通知工作线程何时停止运行。文章提供了具体的VB.NET代码示例,展示了如何启动和取消线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值