Одно событие не будет запущено, если я запусту RaiseEvent в то же время
У меня возникла проблема при использовании InteropUserControl: в InteropUserControl, если я вызову 2 события одновременно, приложение Vb6 пропустит одно из них. Ниже приведен шаг для воспроизведения поведения:
На VB.NET я создал InteropUserControl:
Public Event TestEvent()
Public Sub RaiseTestEvent()
BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
RaiseEvent TestEvent()
End Sub
На Vb6 я создал 2 InteropUserControl и используя этот код:
Private Sub Form_Load()
Me.InteropUserControl1.RaiseTestEvent
Me.InteropUserControl2.RaiseTestEvent
End Sub
Private Sub InteropUserControl1_TestEvent()
MsgBox "InteropUserControl1 fired"
End Sub
Private Sub InteropUserControl2_TestEvent()
MsgBox "InteropUserControl2 fired"
End Sub
То, что я получил, - только одно событие, а другое отсутствует. Есть ли хорошее решение, чтобы не пропустить это событие?
1 ответ
Вы можете попробовать это:
Public Async Function RaiseTestEvent() As Task
Await DoSomethingHere
RaiseEvent TestEvent
End Function
Если DoSomethingHere
не Async, затем измените эту строку на Await Task.Run(Sub() DoSomethingHere)