Mohammad Tavoosi Ответов: 2

C#- как мне дождаться закрытия другого процесса?


Я хочу выполнить внешний файл и сделать что-то, когда файл был закрыт
но
Process. WaitForExit()
Метод не работает и возвращает нулевое исключение
пожалуйста, помогите мне.

Что я уже пробовал:

Process ExecFile = Process.Start(FilePath);
ExecFile.WaitForExit();

2 Ответов

Рейтинг:
1

OriginalGriff

Это зависит от того, что находится в вашем FilePath - если это имя файла данных (например,. jpg), то процесс не обязательно запускается запросом "выполнить это" - система решает, какое приложение запустить, и если есть одно приложение, она может запустить его и вернуть процесс. Если это не так, то возвращается нулевой процесс, и вы не можете ждать его выхода (так как запущенный процесс является системным диалоговым окном).
В моей системе файл .XLSX будет работать и открывать Excel, а затем ждать выхода, но файл .JPG не будет работать и сразу же вернется.


Рейтинг:
0

phil.o

Это означает, что ExecFile является нулевым в то время, когда вы вызываете WaitForExit() метод.
Согласно с Процесс.Метод Запуска (System.Диагностика) | Microsoft Docs[^], вполне возможно, что

Новый процесс, связанный с ресурсом процесса, или null, если ресурс процесса не запущен.
[...]
Если адрес запускаемого исполняемого файла является URL-адресом, то процесс не запускается и возвращается значение null.
Теперь вам предстоит исследовать это; пожалуйста, используйте свой отладчик для этой цели: поместите точку останова в строку инициализации процесса, запустите сеанс отладки (F5 в Visual Studio), затем выполните построчное выполнение (F11) и внимательно следите за значениями, содержащимися в ваших переменных. Мы не можем сделать это для вас.