Tom*_*Tom 72 .net c# windows process
在继续使用方法之前,我需要确保进程正在运行.
声明是:
Process.Start("popup.exe");
Run Code Online (Sandbox Code Playgroud)
你可以做一个WAIT命令或者设置这个值的延迟吗?
jas*_*son 128
你的意思是等到它完成了吗?然后使用Process.WaitForExit:
var process = new Process {
StartInfo = new ProcessStartInfo {
FileName = "popup.exe"
}
};
process.Start();
process.WaitForExit();
Run Code Online (Sandbox Code Playgroud)
或者,如果它是一个具有您正在等待进入消息循环的UI的应用程序,您可以说:
process.Start();
process.WaitForInputIdle();
Run Code Online (Sandbox Code Playgroud)
最后,如果这些都不适用,只Thread.Sleep需要一段合理的时间:
process.Start();
Thread.Sleep(1000); // sleep for one second
Run Code Online (Sandbox Code Playgroud)
小智 15
我也需要这个,我检查了流程的窗口标题.如果它是您期望的那个,您可以确定应用程序正在运行.我正在检查的应用程序需要一些时间来启动,这种方法对我来说很好.
var process = Process.Start("popup.exe");
while(process.MainWindowTitle != "Title")
{
Thread.Sleep(10);
}
Run Code Online (Sandbox Code Playgroud)
Ali*_*deh 12
'ChrisG'的答案是正确的,但我们每次都需要刷新MainWindowTitle,最好检查一下空....这样:
var proc = Process.Start("popup.exe");
while (string.IsNullOrEmpty(proc.MainWindowTitle))
{
System.Threading.Thread.Sleep(100);
proc.Refresh();
}
Run Code Online (Sandbox Code Playgroud)
小智 8
首先:我知道这已经很老了,但仍然没有接受的答案,所以也许我的方法会帮助其他人.:)
我做的是解决这个问题:
process.Start();
while (true)
{
try
{
var time = process.StartTime;
break;
}
catch (Exception) {}
}
Run Code Online (Sandbox Code Playgroud)
var time = process.StartTime只要进程没有启动,关联就会抛出异常.因此,一旦通过,就可以安全地假设流程正在运行并进一步使用它.我正在使用它来等待java进程启动,因为它需要一些时间.这样它应该独立于应用程序运行的机器而不是使用Thread.Sleep().
我知道这不是一个非常干净的解决方案,但是我能想到的唯一应该是性能独立的解决方案.
我同意汤姆的观点。此外,要在执行 Thread.Sleep 时检查进程,请检查正在运行的进程。就像是:
bool found = 0;
while (!found)
{
foreach (Process clsProcess in Process.GetProcesses())
if (clsProcess.Name == Name)
found = true;
Thread.CurrentThread.Sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)