Недопустимое исключение операции из класса процесса C # - PullRequest
15 голосов
/ 20 июля 2009

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

Я использую VSTS 2008 + C # + .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();

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

enter image description here

Ответы [ 3 ]

32 голосов
/ 20 июля 2009

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

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

1 голос
/ 20 июля 2009

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

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

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

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

1 голос
/ 20 июля 2009

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

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

...