我正在从我的c#应用程序开始一个新进程。
创建过程后,我使用 ManagementEventWatcher 和 SetParent 将其主窗口设置为我的应用窗口的子窗口。
问题在于,当我在查询 WITHIN 2 中写入时,每件事情都可以正常工作,除非我等待很长时间。 当我写 WITHIN 1 当事件 EventArrived 被触发时,尚未创建已启动进程的MainWindowHandle。
除了使用计时器之外,有没有什么好方法可以等待创建句柄?
答案 0 :(得分:0)
根据Process.MainWindowHandle
的MSDN文档,您可以使用Process.WaitForInputIdle()
方法“允许进程完成启动,确保已创建主窗口句柄。”< / em>的
根据完成启动过程所需的时间,您可能希望在线程中等待它,否则您的UI可能会冻结。
无论哪种方式,只需等待:
yourProcess.WaitForInputIdle();
//Do your stuff with the MainWindowHandle.
另一种选择是在线程和循环中运行代码,直到MainWindowHandle
不为零。为了避免进入无限循环,你可以添加某种超时。
int timeout = 10000; //10 seconds.
while (yourProcess.MainWindowHandle == IntPtr.Zero && timeout > 0)
{
yourProcess.Refresh();
System.Threading.Thread.Sleep(250); //Wait 0.25 seconds.
timeout -= 250;
}
if (yourProcess.MainWindowHandle == IntPtr.Zero)
{
//Timed out, process still has no window.
return; //Do not continue execution.
}
//The rest of your code here.