代码之家  ›  专栏  ›  技术社区  ›  madlan

在新线程中创建窗体(从事件)

  •  2
  • madlan  · 技术社区  · 14 年前

    我希望这个表单出现在不同的来源(比如下面的SMO Restore complete事件),所以我想我需要在创建表单之前创建一个新的线程?因为它可以从UI线程外部调用。(我还需要向此窗体传递一个字符串)

    子窗体使用计时器+不透明度淡入淡出。

    我做错什么了?

    Private Sub CompleteEventHandler(ByVal sender As Object, ByVal e As Microsoft.SqlServer.Management.Common.ServerMessageEventArgs)
       MyThread = New System.Threading.Thread(AddressOf DoStuff)
        MyThread.Start("meh")
    End Sub
    
    
    Private Delegate Sub DoStuffDelegate(ByVal MsgString As String)
    Private Sub DoStuff(ByVal MsgString As String)
        If Me.InvokeRequired Then
            Me.Invoke(New DoStuffDelegate(AddressOf DoStuff))
        Else
            Dim TempMessage As New frmNotification
            TempMessage.lblMessage.Text = MsgString
            TempMessage.Show()
        End If
    End Sub
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Hans Passant    14 年前

    不要启动新线程,这没有意义,因为您已经在另一个线程上运行,InvokeRequired将始终为True。错误是你打电话来我。调用()但忘记传递“MsgString”参数。你还需要使用我开始醒来了(),无需等待。因此:

    Private Sub CompleteEventHandler(ByVal sender As Object, ByVal e As EventArgs)
        Me.BeginInvoke(New DoStuffDelegate(AddressOf DoStuff), "meh")
    End Sub
    
    Private Sub DoStuff(ByVal MsgString As String)
        Dim TempMessage As New frmNotification
        TempMessage.lblMessage.Text = MsgString
        TempMessage.Show()
    End Sub