В настоящее время я использую «сделать один экземпляр приложения» (событие MyApplication_StartupNextInstance) в VB (формы выигрыша .net framework) для передачи аргументов командной строки из нескольких экземпляров в основную форму. Я добавляю это в список строк, а затем передаю этот список следующей функции/подпрограмме. Список захватывает все аргументы, если я добавляю окно сообщения непосредственно перед вызовом следующей функции, но затем, когда нет msgbox, не все аргументы захватываются.
Я устал использовать таймеры/задержки, что является хитом и промахом. Пробовал использовать синхронизированный msgbox, который исчезает через пару секунд, что то же самое. Как я могу заставить его ждать, пока все экземпляры будут запущены, а затем перейти к следующей строке кода?
'ApplicationEvents.vb
Private Sub MyApplication_StartupNextInstance(sender As Object, e As ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
Dim f = Application.MainForm
If f.GetType Is GetType(my_app_name) Then
CType(f, my_app_name).NewArgumentsReceived(e.CommandLine(0))
End If
End Sub
'my app has the below codes
Public Sub NewArgumentsReceived(args As String)
mylist.Add(args)
End Sub
Private Sub SomeForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
mylist.Add(arg) 'arg is for main form 'args' is for instances
'this is where I want to wait until all the other instances have completed
Anotherfunction(mylist)
End Sub
StartupNextInstance
может быть вызвано в любое время, поэтому должен ли первоначальный экземпляр ждать вечно, на случай, если запустится другой экземпляр? - person jmcilhinney   schedule 04.09.2020StartupNextInstance
, вы открывали новую дочернюю форму в начальном экземпляре для файла, предоставленного в качестве аргумента. Эта новая дочерняя форма должна быть открыта в любое время. - person jmcilhinney   schedule 04.09.2020