Подтвердить что ты не робот

Недопустимое исключение операции из класса процессов С#

Когда я использую отладчик VSTS для просмотра свойств экземпляра класса Process, многие свойства помечены InvalidOperationException. Зачем? Я делаю что-то неправильно?

Я использую VSTS 2008 + С# +.Net 2.0 для разработки консольного приложения.

Вот мой код:

System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo.FileName = "IExplore.exe";
myProcess.StartInfo.Arguments = @"www.google.com";
myProcess.StartInfo.Verb = "runas";
myProcess.Start();

И снимок экрана отладчика:

http://i26.tinypic.com/bdldvm.jpg http://i26.tinypic.com/bdldvm.jpg

4b9b3361

Ответ 1

Действительно ли вы начали процесс, когда была сделана съемка отладчика? Чтобы вызвать скриншот, который я ожидаю увидеть перед тем, как вызывается метод Start().

Обратите внимание, что общий шаблон - это создать ProcessStartInfo, заполнить его, а затем вызвать статический метод Process.Start(startInfo). Это делает его концептуально более простым: вы не видите объект Process до его запуска.

Ответ 2

Большинство свойств становятся доступными после запуска процесса IExplore.

Ответ 3

Да, это ожидаемое поведение, и оно явно задокументировано в MSDN.

Например, свойство Process.BasePriority может вызывать исключение InvalidOperationException, когда процесс завершился или процесс не запущен (подробнее см. MSDN).

Ответ 4

Многие свойства отмечены InvalidOperationException, потому что пока вы не начнете процесс. Объект 'myProcess' не связан с каким-либо запущенным процессом и, следовательно, не может получить информацию.

Попробуйте добавить эти инструкции после кода для запуска процесса

if (myProcess != null)  
{
  myProcess.WaitForExit();
   //or any other statements for that matter
}

Теперь, когда вы находитесь внутри оператора if, отладчик VSTS сможет отображать большинство свойств, связанных с объектом myProcess. Это происходит потому, что объект myProcess теперь связан с запущенным процессом "IExplore.exe".