21

当我使用 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();

以及调试器的截图:

在此处输入图像描述

4

3 回答 3

36

当调试器图片被拍摄时,你真的开始了这个过程吗?这是我希望在Start()调用该方法之前看到的屏幕截图。

请注意,常见的模式是创建一个ProcessStartInfo,填充它,然后调用静态Process.Start(startInfo)方法。Process这使得它在概念上更简单:在对象启动之前您不会看到它。

于 2009-07-20T06:05:04.223 回答
2

许多属性都标有 InvalidOperationException,因为在您启动该过程之前。对象“myProcess”不与任何正在运行的进程相关联,因此它无法获取信息。

尝试在代码之后添加这些语句以启动该过程

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

现在,当您在 if 语句中时,VSTS 调试器将能够显示与对象 myProcess 关联的大部分属性。发生这种情况是因为,myProcess 对象现在与正在运行的进程“IExplore.exe”相关联。

于 2009-07-20T06:38:34.827 回答
1

是的,这是预期的行为,并且在 MSDN 中也有明确记录。

例如,当进程退出或进程尚未启动时,Process.BasePriority 属性可能会引发 InvalidOperationException 异常(请参阅MSDN中的更多详细信息)。

于 2009-07-20T06:32:27.397 回答