1

我正在从我的 c# 应用程序开始一个新进程。

创建进程后,我使用ManagementEventWatcherSetParent将其主窗口设置为我的应用程序窗口的子窗口。

问题是,当我在2 以内的查询中写入时,一切正常,除了我等待很长时间。当我写WITHIN 1时,事件EventArrived触发时尚未创建已启动进程的 MainWindowHandle 。

除了使用计时器之外,还有什么好方法可以等待创建句柄?

4

1 回答 1

1

根据 MSDN 文档,Process.MainWindowHandle您可以使用该Process.WaitForInputIdle()方法以“允许进程完成启动,确保已创建主窗口句柄”。

根据进程完成启动所需的时间,您可能希望在线程中等待它,否则您的 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.
于 2016-07-04T18:30:04.457 回答