Process.WaitForExit()等待命令窗口而不是实际应用程序

时间:2019-01-31 16:42:07

标签: c# .net

我希望下面的代码运行不同的应用程序,并在它们结束附加任务之后运行。

但是,某些应用程序使命令窗口保持打开状态,而另一些应用程序则没有。

例如outlook.exe运行得很好,

ProcessStartInfo startInfo = new ProcessStartInfo("C:\\Program Files\\Microsoft Office\\root\\Office16\\OUTLOOK.EXE");

Process process = new Process();
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();

但是,当运行Visual Studio Code时,命令窗口在后台保持活动状态。

ProcessStartInfo startInfo = new ProcessStartInfo("C:\\Program Files (x86)\\Microsoft VS Code\\Code.exe");

Process process = new Process();
process.StartInfo = startInfo;
process.Start();
process.WaitForExit();

似乎加载的应用程序进程是命令窗口,而不是Visual Studio Code。因此,当我删除WaitForExit()时,命令窗口消失了;但后来我不知道应用程序何时加载。

还有另一种方法来了解Visual Studio Code是否已完全加载吗?

1 个答案:

答案 0 :(得分:0)

Process.WaitForExit()等到您启动的进程实际上已经退出(顾名思义)。如果在您启动的应用程序仍然可见的情况下返回此消息,则是因为未使用您启动的进程。例如,可以使用已经运行的Outlook进程的现有实例。

如果您要等待开始准备接受用户输入的过程,请使用Process.WaitForInputIdle()

  

使用WaitForInputIdle()强制您的应用程序进行处理,直到消息循环返回到空闲状态为止。当执行带有用户界面的进程时,操作系统每次将Windows消息发送给该进程时,都会执行其消息循环。然后,该过程返回到消息循环。当进程正在等待消息循环内的消息时,该进程被称为处于空闲状态。例如,当您的应用程序需要等待启动过程完成其主窗口的创建才能在应用程序与该窗口进行通信之前,此状态非常有用。