Предотвращение диалога в Form1 от блокировки взаимодействия с Form2? - PullRequest
0 голосов
/ 19 декабря 2018

Я работаю с приложением WinForm, которое имеет две формы.Первая форма является основной формой со всей логикой.Вторая форма содержит элемент управления браузера и осуществляет доступ к внутренней веб-странице на основе данных, переданных из формы Form1.Затем с веб-страницей можно взаимодействовать.Проблема возникает, когда MessageBox выталкивается в Form1, взаимодействие блокируется в Form2.

Есть ли способ включить взаимодействие Form2 до ответа на MessageBox?

OpenBrowser(docIDs, txtID.Text)
 Me.Activate()
 resultYESNO = MessageBox.Show(Me, questionText, "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
         If resultYESNO = DialogResult.Yes Then
           columnValue = "Y"
          ElseIf resultYESNO = DialogResult.No Then
           columnValue = "N"
           End If

SubBrowser Sub:

Private Sub OpenBrowser(ByVal docIDs As List(Of String), ByVal ID As String)
    If Not Application.OpenForms().OfType(Of Browser).Any Then
        Dim browser = New Browser()
    End If
    Dim encodeIDs As String
    encodeIDs = String.Join(",", docIDs.ToArray())
    Dim barray As Byte() = System.Text.Encoding.UTF8.GetBytes(encodeIDs)
    Dim encodedIDs = System.Convert.ToBase64String(barray)
    Dim url = ConfigurationManager.AppSettings("MyBrowserPath")
    Browser.WebBrowser1.Url = New Uri(url & encodedIDs)
    Dim area = Screen.PrimaryScreen.WorkingArea
    Dim width = CInt(area.Width / 2)
    Dim height = CInt(area.Height)
    Browser.Width = width
    Browser.Height = 800
    Browser.SetDesktopLocation(width, 0)
    Browser.Show()
    Browser.BringToFront()
    Browser.Activate()
End Sub

1 Ответ

0 голосов
/ 19 декабря 2018

В следующем примере показано, как можно создавать разные потоки пользовательского интерфейса и показывать разные формы в разных потоках.Тогда модальные диалоговые формы являются модальными в потоке, который их создал:

Imports System.Threading
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        For i = 1 To 2
            Dim index = i
            Dim t = New Thread(
                Sub()
                    Dim f = New Form With {.Text = $"Form {index}"}
                    Dim b = New Button With {.Text = "Click Me."}
                    AddHandler b.Click,
                        Sub()
                            Using d As New Form()
                                d.StartPosition = FormStartPosition.CenterParent
                                d.Size = New Drawing.Size(100, 100)
                                d.ShowDialog()
                            End Using
                        End Sub
                    f.Controls.Add(b)
                    Application.Run(f)
                End Sub)
            t.SetApartmentState(ApartmentState.STA)
            t.IsBackground=True
            t.Start()
        Next
    End Sub
End Class
...