Я в WindowsForm (С#.net 3.5) и одним нажатием кнопки запускаю другое внешнее приложение (также .net 3.5) с помощью Process.Start() и понимаю, когда он доступен после того, как я запустил его.
ProcessStartInfo psInfo = new ProcessStartInfo(@"MyApplication.exe");
psInfo.RedirectStandardOutput = true;
psInfo.RedirectStandardError = true;
psInfo.UseShellExecute = false;
psInfo.CreateNoWindow = true;
Process proc = Process.Start(psInfo);
proc... IsFullyLoaded()?
Как я могу это сделать?
Чтобы ожидание процесса создания формы, вызовите метод WaitForInputIdle
.
Чтобы узнать, готова ли она, попробуйте следующее:
bool isReady = proc.WaitForInputIdle(0);
Или, альтернативно,
bool isReady = (proc.MainWindowHandle != IntPtr.Zero);
Вы также можете использовать свойство MainWindowHandle для отправки сообщений в форму с помощью функции API SendMessage
Вы можете передать аргумент процессу, чтобы он знал, как он был запущен.
psInfo.Arguments = "-startedByProcess";
Затем выполните обратный вызов дочернего процесса для процесса владельца, чтобы он знал, что он запущен, путем удаленного доступа или что-то в этом роде.