Обработка события Process.Exited - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Имеется код:
// файл создадим в "Моих Документах"
String file = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\out.txt";
String output = "";
using (StringWriter writer = new StringWriter()) {
    // Переназначаем выходной поток консоли
    // Теперь консоль пишет в строку
    Console.SetOut(writer);
    Console.WriteLine("Это и следующее сообщение выводятся в выходной поток консоли.");
    Console.WriteLine("Мы можем назначить другой поток.");
    output = writer.ToString();
}
// Записываем строку в файл и открываем его в "Блокноте"
File.WriteAllText(file, output);
ProcessStartInfo procInfo = new ProcessStartInfo {
    FileName = "notepad",
    Arguments = file,
    UseShellExecute = false
};
// 
Process proc = new Process();
proc.EnableRaisingEvents = true;
proc.StartInfo = procInfo;
// Действия после завершения процесса
// Проблема ТУТ
proc.Exited += (sender, ea) =>
{
    System.Windows.Forms.MessageBox.Show("Процесс завершён.");
    File.Delete(file);
};
proc.Start();
И всё работает как надо кроме обработчика события Exited. После закрытия блокнота, файл не удаляется и сообщение не выводится. Однако, в режиме отладки, после закрытия блокнота, при попытке получить информацию о переменной proc, сообщение вдруг появляется и файл вдруг удаляется. Как это исправить и почему так происходит?

Решение задачи: «Обработка события Process.Exited»

textual
Листинг программы
bool contin=false;
proc.Exited += (sender, ea) =>
{
    System.Windows.Forms.MessageBox.Show("Процесс завершён.");
    File.Delete(file);
contin=true;
};
proc.Start();
while (!contin)
{
Thread.Sleep(100);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.154 из 5