Как узнать, когда процесс загружает winform с помощью Process.Start?
Вопрос
Я нахожусь в 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 для отправки сообщений в форму с помощью SendMessage
API-функция
Другие советы
Вы можете передать аргумент процессу, сообщив ему, как он был запущен.
psInfo.Arguments = "-startedByProcess";
Затем попросите дочерний процесс выполнить обратный вызов процессу-владельцу, чтобы сообщить ему, что он начался, посредством удаленного взаимодействия или чего-то в этом роде.