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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top