Domanda

Sono in una WindowsForm (C # .NET 3.5) e al clic di un pulsante lanciare un'altra applicazione esterna (anche .NET 3.5) utilizzando Process.Start () e capire quando è disponibile dopo aver lanciato esso.

    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()?

Come posso fare?

È stato utile?

Soluzione

Per attendere che il processo per creare la sua forma, chiamare il metodo WaitForInputIdle .

Per scoprire se è pronto, provate questo:

bool isReady = proc.WaitForInputIdle(0);

O, in alternativa,

bool isReady = (proc.MainWindowHandle != IntPtr.Zero);

È anche possibile utilizzare la proprietà MainWindowHandle per inviare messaggi al modulo utilizzando il SendMessage funzione API

Altri suggerimenti

Si potrebbe passare un argomento al processo di lasciarlo sapere come è stato lanciato.

psInfo.Arguments = "-startedByProcess";

Poi hanno la richiamata processo figlio al processo proprietario per fargli sapere di aver iniziato, tramite i servizi remoti o qualcosa del genere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top