2012-02-15 4 views
1

Я разрабатываю приложение на C#. Как часть условия ошибки, я хотел бы открыть файл в «Блокноте» для редактирования пользователем (при приостановке основного процесса). Я могу загрузить файл с помощью Process.Start. Я не могу понять, как приостановить основное приложение до тех пор, пока пользователь не сохранит или не выйдет из файла блокнота. Есть ли что-то другое, кроме Process.start, которое я мог бы использовать, чтобы запустить Notepad.exe в основном процессе или какой-нибудь другой трюк, который я могу использовать. Я чувствую, что есть простое решение, которое я пропускаю. Заранее спасибо.Приостановка основного процесса в C#

ответ

5

Вы можете использовать Process.WaitForExit, чтобы заблокировать основную программу до тех пор, пока Блокнот не будет закрыт.

Заблокировать его, пока файл не будет сохранен или закрыт будет немного сложнее.

Один из вариантов здесь - иметь ManualResetEvent и ждать его. Затем вы можете прослушивать Process.Exited (после установки Process.EnableRaisingEvents) и использовать его для вызова Set() в дескрипторе ожидания. Это приведет к тому, что ваш код будет продолжен, когда процесс завершится.

Для обработки сохраненного файла отдельный файл FileSystemWatcher может следить за сохранением (сменой файла) самого файла. Если файл сохраняет/изменяет, вы можете продолжить, вызвав Set().

0

Я считаю, что вы должны сделать что-то вроде этого.

var notePad = new Process { StartInfo = { FileName = "notepad.exe", Arguments = "newfile.txt" } }; 
     notePad.Start(); 

     while(!notePad.HasExited) 
     { 

     } 

     MessageBox.Show("Done."); 

«Готово». поле сообщения не должно появляться до закрытия блокнота. Опять же, ответ выше моего менее хакерский.

+3

Лучше использовать 'notePad.WaitForExit()', так как вы не будете есть 100% процессорного ядра, ожидающего вращения таким образом;) –

+0

Да, я должен признать, что вращение в цикле while не самое элегантный решений, ха-ха. Спасибо за совет. –