2012-06-06 3 views
1

Я использую это:Как узнать, когда был создан процесс, созданный Process.Start()?

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

Но я закрыть окно и не получить MessageBox.Show("closed!");. Как это исправить?

+0

Вы подтвердили, что процесс на самом деле закончился? –

+0

@BryanCrosby: Да. – Jack

ответ

3

Вы можете запустить оповещение после proc2.WaitForExit()

+0

Он заблокирует мое приложение? – Jack

+0

У этого есть метод перегрузки, который вы можете указать тайм-аут. К сожалению, он не убьет ваш процесс, он просто перейдет –

4

вы забыли включить События

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

Вы забыли установить EnableRaisingEvents в действительности.

Кроме того, вы можете захотеть создать процесс с помощью конструктора, установить ProcessStartInfo и затем вызвать Start после регистрации для прослушивания события. В противном случае у вас есть условие гонки, в котором процесс выходит до того, как вы даже зарегистрируетесь, чтобы прослушать событие (маловероятно, что я знаю, но не математически невозможно).

var process = new Process(); 

process.StartInfo = new ProcessStartInfo(Path.GetFullPath(filename)); 
process.EnableRaisingEvents = true; 

process.Exited += (a, b) => 
{ 
    MessageBox.Show("closed!"); 
}; 

process.Start();