Como saber quando um winform é carregado por Process.Start?
Pergunta
Estou num WindowsForm (C # .NET 3.5) e no clique de um botão de lançamento outro aplicativo externo (também NET 3.5) usando Process.Start () e entender quando ele estiver disponível depois de eu ter lançado-lo.
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()?
Como posso fazer isso?
Solução
Para aguardar o processo para criar a sua forma, chamar o WaitForInputIdle
método.
Para saber se está pronto, tente o seguinte:
bool isReady = proc.WaitForInputIdle(0);
Ou, em alternativa,
bool isReady = (proc.MainWindowHandle != IntPtr.Zero);
Você também pode usar a propriedade MainWindowHandle para enviar mensagens para o formulário usando o SendMessage
função API
Outras dicas
Você poderia passar um argumento para o processo de deixá-lo saber como ele foi lançado.
psInfo.Arguments = "-startedByProcess";
Então, o callback processo filho para o processo proprietário para deixá-lo saber que já começou, via comunicação remota ou algo parecido.