Process.WaitForExit () вызывает исключение NullReferenceException - PullRequest
0 голосов
/ 19 мая 2009

Следующий код вызывает исключение NullReferenceException

tStartParameter = String.Format(tStartParameter, tTo, tSubject)
tProcess = Process.Start(New ProcessStartInfo(tStartParameter) _
           With {.UseShellExecute = True})
tProcess.WaitForExit()

tStartParameter:

https://mail.google.com/?view=cm&fs=1&tf=1&to=t@example.com&su=boogaloo!!

Используя отладчик, я вижу, что Process.Start возвращает ноль. Итак ... какие-либо мысли о том, почему это происходит? Я бы очень хотел заблокировать выполнение программы, пока пользователь не завершит запущенный процесс.

UPDATE: Рефакторинг кода к этому:

tStartParameter = String.Format(tStartParameter, tTo, tSubject)
tProcess = New Process
tProcess.StartInfo = New ProcessStartInfo(tStartParameter) _
                     With {.UseShellExecute = True}
tProcess.Start()
tProcess.WaitForExit()

вызывает это исключение:

InvalidOperationException: ни один процесс не связан с этим объектом.

1 Ответ

4 голосов
/ 19 мая 2009

Из MSDN Process.Start вернет:

Новый компонент процесса, который связанный с ресурсом процесса, или нулевая ссылка (Ничего в Visual Basic), если нет ресурс процесса запущен (для Например, если существующий процесс повторно).

В вашем случае, поскольку вы передаете URL-адрес Process.Start, а не исполняемому файлу, вы фактически не запускаете новый процесс. Вы передаете URL iexplore, или каков ваш браузер. И поэтому вы получаете ноль обратно.

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

Process p = Process.Start("iexplore", "http://www.google.com");
p.WaitForExit();

... что мне подходит. Тем не менее, требуется указать исполняемый файл браузера.

...