我有一些代码可以创建一个 Process 实例并稍后启动它。有一些逻辑需要检查进程是否已经启动。 HasExited
可用于检查启动的进程是否已退出,但我找不到与HasStarted
类似的功能。乍一看,StartTime
看起来是个不错的选择,但如果进程退出,此函数将抛出。此外,文档说 StartTime
只对启动的进程有意义。
确定进程是否已启动(已启动,但可能已退出)的“正确”方法是什么?
最佳答案
虽然其他人建议的方法可行,但这并不是处理此类事情的最有效方法。如果一直循环检查进程是否退出,会浪费大量的系统资源。 您应该关心的是只知道进程何时退出,而不是等待它循环以检查它是否已经退出。因此,正确的方法是处理事件。
下面的代码解释了如何使用事件来做到这一点。
// Declare your process object with WithEvents, so that events can be handled.
private Process withEventsField_MyProcess;
Process MyProcess {
get { return withEventsField_MyProcess; }
set {
if (withEventsField_MyProcess != null) {
withEventsField_MyProcess.Exited -= MyProcess_Exited;
}
withEventsField_MyProcess = value;
if (withEventsField_MyProcess != null) {
withEventsField_MyProcess.Exited += MyProcess_Exited;
}
}
}
bool MyProcessIsRunning;
private void Button1_Click(System.Object sender, System.EventArgs e)
{
// start the process. this is an example.
MyProcess = Process.Start("Notepad.exe");
// enable raising events for the process.
MyProcess.EnableRaisingEvents = true;
// set the flag to know whether my process is running
MyProcessIsRunning = true;
}
private void MyProcess_Exited(object sender, System.EventArgs e)
{
// the process has just exited. what do you want to do?
MyProcessIsRunning = false;
MessageBox.Show("The process has exited!");
}
编辑: 知道进程是否已经开始应该很容易,因为在代码中的某处开始了进程。因此,您可以在那里设置一个标志,并在进程退出时将其设置为 false。我更新了上面的代码以展示如何轻松设置这样的标志。
关于c# - 如何判断一个进程是否已经启动但还没有退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9719905/