2014-01-08 2 views
1

Я новичок в C#, и я нахожу его очень отличным от моего происхождения PHP, поэтому я могу сделать это совершенно неправильно. Однако из моего понимания это довольно точно. В основном мне нужно запустить программу при нажатии кнопки в моей форме (эта часть работает отлично), тогда, когда пользователь закрывает программу, мне нужно запустить действие, в этом случае я показываю окно сообщения.Как запустить действие после закрытия программы?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Diagnostics; 
using System.Windows.Forms; 

namespace usb 
{ 
    class Applications 
    { 
     //condition variables 
     public static bool CalcStatus = false; 

     public static void Calc() 
     { 
      Process CALC; 
      CALC = Process.Start("calc.exe"); 
      if (CALC.HasExited) 
      { 
       MessageBox.Show("CALC has exited"); 
       CalcStatus = true; 
      } 
     } 
    } 
} 

этот фрагмент является частью класса, а другой класс использует эту функцию, когда она вызывается известково откроется окно не будет появляться с предупреждением, когда известково закрыт. Кто-нибудь знает, что я делаю неправильно? Все больше указателей приветствуются, как я все еще учусь :)

+0

[этот ответ] (http://stackoverflow.com/a/611127) описывает это очень хорошо – Default

ответ

8

Вы используете Exited события, чтобы запустить код, когда выходит из процесса:

CALC.EnableRaisingEvents = true; 
CALC.Exited += (sender, args) => MessageBox.Show("CALC has exited"); 
+0

Это сделал это! Большое спасибо – Halter

0

подхода 1: Показать сообщение с ожиданием

//condition variables 
public static bool CalcStatus = false; 

public static void Calc() 
{ 
    var calc = new Process 
    { 
     StartInfo = new ProcessStartInfo 
     { 
      FileName = "calc.exe" 
     } 
    }; 
    calc.Start(); 
    calc.WaitForExit(); 
    MessageBox.Show("CALC has exited"); 
    CalcStatus = true; 
} 

подход 2: Показать сообщение без ждать

//condition variables 
public static bool CalcStatus = false; 

public static void Calc() 
{ 
    var calc = new Process 
    { 
     StartInfo = new ProcessStartInfo 
     { 
      FileName = "calc.exe" 
     }, 
     EnableRaisingEvents = true, 
    }; 
    calc.Exited += calc_Exited; 

    calc.Start(); 
    CalcStatus = true; 
} 

static void calc_Exited(object sender, EventArgs e) 
{ 
    MessageBox.Show("CALC has exited"); 
} 
+0

Первое решение будет блокировать поток пользовательского интерфейса, что является серьезной проблемой здесь. – Servy

+0

Вы должны использовать второе решение, а первое решение - для выяснения различий между двумя подходами. –

+0

1) Если это так, то * ответ должен сказать, что *, как есть, ваш ответ, похоже, выступает за использование обоих подходов. 2) Если ваша цель состоит в том, чтобы прояснить различия, то уточните различия *. Вы не объяснили, как они отличаются, вы только что показали оба решения. – Servy

Смежные вопросы