Хотя методы, предложенные другими, будут работать, это не самый эффективный способ обработки таких вещей. Если вы сохраните цикл, проверяющий, вышел ли процесс или нет, вы будете тратить много системных ресурсов. Ваша забота должна состоять в том, чтобы просто знать, когда процесс выходит, а не сидеть, чтобы проверить, вышел ли он. Итак, правильный способ - это обработать события.
В приведенном ниже коде объясняется, как это сделать с помощью событий.
// Declare your process object with WithEvents, so that events can be handled.
private Process withEventsField_MyProcess;
Process MyProcess {
get { return withEventsField_MyProcess; }
set {
if (withEventsField_MyProcess != null) {
withEventsField_MyProcess.Exited -= MyProcess_Exited;
}
withEventsField_MyProcess = value;
if (withEventsField_MyProcess != null) {
withEventsField_MyProcess.Exited += MyProcess_Exited;
}
}
}
bool MyProcessIsRunning;
private void Button1_Click(System.Object sender, System.EventArgs e)
{
// start the process. this is an example.
MyProcess = Process.Start("Notepad.exe");
// enable raising events for the process.
MyProcess.EnableRaisingEvents = true;
// set the flag to know whether my process is running
MyProcessIsRunning = true;
}
private void MyProcess_Exited(object sender, System.EventArgs e)
{
// the process has just exited. what do you want to do?
MyProcessIsRunning = false;
MessageBox.Show("The process has exited!");
}
EDIT: Зная начал ли процесс или не должен быть легким, так как начинают процесс где-то в коде. Таким образом, вы можете установить там флаг и установить значение false при выходе процесса. Я обновил код выше, чтобы показать, как легко установить такой флаг.
Возможный дубликат [Как узнать, работает ли процесс?] (Http://stackoverflow.com/questions/262280/how-can-i-know-if-a-process-is-running) –
Изменил вопрос немного, чтобы лучше отразить то, что я прошу, если процесс был запущен (возможно, он уже ушел). – larsmoa
Изменено название немного ... –