Как узнать, когда процесс загружает winform с помощью Process.Start?

StackOverflow https://stackoverflow.com/questions/1177956

  •  19-09-2019
  •  | 
  •  

Вопрос

Я нахожусь в 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";

Затем попросите дочерний процесс выполнить обратный вызов процессу-владельцу, чтобы сообщить ему, что он начался, посредством удаленного взаимодействия или чего-то в этом роде.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top