当我获得对System.Diagnostics.Process
的引用时,我如何知道某个进程当前是否正在运行?
发布于 2008-11-04 16:14:32
这是一种使用名称执行此操作的方法:
Process[] pname = Process.GetProcessesByName("notepad");
if (pname.Length == 0)
MessageBox.Show("nothing");
else
MessageBox.Show("run");
您可以循环所有进程以获取ID,以便稍后进行操作:
Process[] processlist = Process.GetProcesses();
foreach(Process theprocess in processlist){
Console.WriteLine("Process: {0} ID: {1}", theprocess.ProcessName, theprocess.Id);
}
发布于 2008-11-06 11:47:29
这是我在使用反射器后发现的最简单的方法。为此,我创建了一个扩展方法:
public static class ProcessExtensions
{
public static bool IsRunning(this Process process)
{
if (process == null)
throw new ArgumentNullException("process");
try
{
Process.GetProcessById(process.Id);
}
catch (ArgumentException)
{
return false;
}
return true;
}
}
Process.GetProcessById(processId)
方法调用ProcessManager.IsProcessRunning(processId)
方法,并在进程不存在的情况下抛出ArgumentException
。由于某些原因,ProcessManager
类是内部的……
发布于 2008-11-04 16:57:34
同步解决方案:
void DisplayProcessStatus(Process process)
{
process.Refresh(); // Important
if(process.HasExited)
{
Console.WriteLine("Exited.");
}
else
{
Console.WriteLine("Running.");
}
}
异步解决方案:
void RegisterProcessExit(Process process)
{
// NOTE there will be a race condition with the caller here
// how to fix it is left as an exercise
process.Exited += process_Exited;
}
static void process_Exited(object sender, EventArgs e)
{
Console.WriteLine("Process has exited.");
}
https://stackoverflow.com/questions/262280
复制相似问题