Come sapere quando un processo creato da Process.Start () è stato chiuso?

Sto usando questo:

var proc2 = Process.Start(Path.GetFullPath(filename)); proc2.Exited += (a, b) => { MessageBox.Show("closed!"); }; 

Ma chiudo la finestra e non ottengo MessageBox.Show("closed!"); . Come risolvere questo?

È necessario impostare Process.EnableRaisingEvents su true .

Hai dimenticato di impostare EnableRaisingEvents su true.

Inoltre, potresti voler creare un processo con il costruttore, impostare ProcessStartInfo e quindi chiamare Start dopo esserti registrato per ascoltare l’evento. Altrimenti si ha una condizione di competizione in cui il Processo esce prima ancora di registrarsi per ascoltare l’evento (improbabile, lo so, ma non matematicamente imansible).

 var process = new Process(); process.StartInfo = new ProcessStartInfo(Path.GetFullPath(filename)); process.EnableRaisingEvents = true; process.Exited += (a, b) => { MessageBox.Show("closed!"); }; process.Start(); 

ti dimentichi di abilitare gli eventi

 Process p; p = Process.Start("cmd.exe"); p.EnableRaisingEvents = true; p.Exited += (sender, ea) => { System.Windows.Forms.MessageBox.Show("Cmd was Exited"); }; 

È ansible proc2.WaitForExit() l’avviso dopo proc2.WaitForExit()