static Process[] processArray = new Process[1];
static void Main(string[] args)
{
bool programIsRunning = false;
string process = "file location file name .exe";
processArray = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(process));
Console.WriteLine(processArray);
do
{
if (processArray == null && programIsRunning == false)
{
Process.Start("file location file name .exe");
programIsRunning = true;
}
} while (true);
}
当我运行此代码并启动第一个exe时,第二个不会开始运行(它应该)。但是,如果我if (processArray != null && programIsRunning == false)
第二个exe文件运行,即使第一个exe文件没有运行。
答案 0 :(得分:4)
这里最大的问题是循环中的代码不够(及其while(true)
!)
因为您没有将programIsRunning
重置为false(并且您甚至不需要该变量),或者重新获取Process
数组,所以只有第一个结果才会曾经运行过(实际上,它只在processArray
为空时运行,它可能不是,只是空的。)
你真的想要更接近的东西:
string process = "file location file name .exe";
do
{
processArray = Process.GetProcessesByName(Path.GetFileNameWithoutExtension(process));
Console.WriteLine(processArray);
if (!processArray?.Any() ?? false)
{
Process.Start(process);
}
Thread.Sleep(2000);//IMPORTANT: Sleep or you are doing expensive work in a tight loop!
} while (true);
即使代码可以通过将你的循环放在一个单独的线程中并且在while上有条件来改进非常,所以你可以正确地关闭它,或者只使用Timer
。您根本不需要循环,因为您可以附加到您创建的进程的Exited
事件,以防它关闭。