来自C#进程类的无效操作exception
当我使用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();
以及调试器的屏幕截图:
如果您在调试器图片拍摄时实际启动了该过程? 这是我希望在调用Start()
方法之前看到的屏幕截图。
请注意,常见模式是创建ProcessStartInfo
,填充它,然后调用静态Process.Start(startInfo)
方法。 这使得它在概念上更简单:在启动之前,您不会看到Process
对象。
是的,这是预期的行为,它也明确记录在MSDN中。
例如,Process.BasePriority属性可以在进程退出或进程尚未启动时抛出InvalidOperationExceptionexception(请参阅MSDN中的更多详细信息)。
许多属性都标有InvalidOperationException,因为在您启动该过程之前。 对象’myProcess’与任何正在运行的进程都没有关联,因此它无法获取信息。
尝试在代码启动后添加这些语句
if (myProcess != null) { myProcess.WaitForExit(); //or any other statements for that matter }
现在,当您在if语句中时,VSTS调试器将能够显示与对象myProcess关联的大多数属性。 发生这种情况是因为myProcess对象现在与正在运行的进程“IExplore.exe”相关联。