从后台线程模式显示消息框



在我的Winform VB.NET 应用程序中,我正在检查一些字段。如果一个特定字段等于true我需要显示消息。通常它是这样的:

If (myField) Then
     MessageBox.Show("Something is wrong", "Warning", MessageBoxButtons.OK)
    // continuing...
End If

此消息必须以模式方式显示(用户只有在单击"确定"按钮后才能返回主窗体)。问题是我不希望线程等待单击(只需显示消息并继续 - 不要等待确定按钮)。

我唯一的想法是在后台线程中显示消息:

If (myField) Then
     Dim t As Thread = New Thread(AddressOf ShowMyMessage)
     t.Start()
     // continuing...
End If
Private Sub ShowMyMessage()
     MessageBox.Show("Something is wrong", "Warning", MessageBoxButtons.OK)
End Sub

但在这种情况下,消息不会以模式方式显示(用户可以返回主窗体并与之交互,而无需单击"确定"按钮)。

有什么想法吗?

如果这是你想做的,你的设计可能是错误的,但是为了一个练习,我写了一些应该实现你想要的东西。

Private Sub Button11_Click(sender As Object, e As EventArgs) Handles Button11.Click
    Dim thr As New Thread(Sub() ThreadTest())
    thr.Start()
End Sub
Private Sub ThreadTest()
    Debug.WriteLine("Started")
    Me.ShowMessageBox("Can't click on the main form now", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
    Debug.WriteLine("Thread continued")
End Sub
Public Sub ShowMessageBox(textToShow As String, caption As String, buttons As MessageBoxButtons, icon As MessageBoxIcon)
    Me.BeginInvoke(Sub() MessageBox.Show(textToShow, caption, buttons, icon))
End Sub

当您运行它时,您将看到 ThreadTest 代码在消息框显示之后继续进行,但在单击消息框上的 ok 之前不允许与主窗体进行交互

最新更新