none
怎样在线程终止的时候弹出对话框 RRS feed

  • 问题

  • Dim t As thread
    Private Sub MainSub_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MainSub.Click
            t = New Thread(AddressOf Me.RunSub)
            t.Start()           '进程开始
    End Sub
    Sub RunSub()
        For iCount = 0 to 100
          if iCount = 50 then
              Interrupt.Show()   'Interrupt是个对话框
              t.Abort()                 '进程终止
          end if
         iCount+=1
        next
    t.Abort()
    End Sub

    好像是个很白菜的问题啊..

    我想在进程t终止的时候弹出Interrupt对话框,可是随着t进程的终止,弹出的对话框也被关掉了

    请问应该怎样避免?谢谢



    2012年6月12日 11:26

答案

  • 您好:)

    可以尝试使用线程通知方式通知某个线程已经完成了任务,然后弹出框框退出。

    示例代码:

    Imports System.Threading
    Public Class Form1
        Dim th As Thread = Nothing
        '未完成任务状态
        Dim flag As New AutoResetEvent(False)
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            th = New Thread(AddressOf MyFunc)
            th.IsBackground = True
            th.Start()
            WaitHandle.WaitAll(New WaitHandle() {flag})
            th.Abort()
            '弹出框框
            MsgBox("已经完成")   '替换您的任务
        End Sub
    
        Private Sub MyFunc()
            For index = 1 To 100
                If (index = 50) Then
                    '完成任务
                    flag.Set()
                End If
            Next
        End Sub
    End Class

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月13日 2:44
    版主
  • 使用ShowDialog()可以阻塞当前线程的运行

    共同努力,共同提高
    kaedei#live.cn My BLOG

    2012年6月14日 2:30

全部回复

  • 您好:)

    可以尝试使用线程通知方式通知某个线程已经完成了任务,然后弹出框框退出。

    示例代码:

    Imports System.Threading
    Public Class Form1
        Dim th As Thread = Nothing
        '未完成任务状态
        Dim flag As New AutoResetEvent(False)
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            th = New Thread(AddressOf MyFunc)
            th.IsBackground = True
            th.Start()
            WaitHandle.WaitAll(New WaitHandle() {flag})
            th.Abort()
            '弹出框框
            MsgBox("已经完成")   '替换您的任务
        End Sub
    
        Private Sub MyFunc()
            For index = 1 To 100
                If (index = 50) Then
                    '完成任务
                    flag.Set()
                End If
            Next
        End Sub
    End Class

       QQ我:讨论(Talk)
    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年6月13日 2:44
    版主
  • 使用ShowDialog()可以阻塞当前线程的运行

    共同努力,共同提高
    kaedei#live.cn My BLOG

    2012年6月14日 2:30