2

我阅读了一些关于 MainWindowHandle 的线程,但我找不到解决问题的方法,我正在启动一个 gui 应用程序并希望通过进程对象获取 MainWindowHandle,但如果我不打算这样做,句柄值始终为零等待 thread.sleep() 直到加载 gui。我也尝试使用 WaitForInputIdle 但它根本没有帮助。

process.Start();

process.WaitForInputIdle(1000);
while (process.MainWindowHandle == IntPtr.Zero)
{
     Thread.Sleep(100);
}
// do something with the handle

如果我用普通线程替换waitforinputidle,他永远不会离开。睡眠他得到了正确的句柄。

简而言之:如果我得到一个句柄,我只想继续我的代码!=零,但我不想为此等待静态时间

4

1 回答 1

8

MainWindowHandle 中存储的值被缓存。在循环中添加一个 process.Refresh() 以使该值无效:

while (process.MainWindowHandle == IntPtr.Zero)
{
    Thread.Sleep(100);
    process.Refresh();
}
于 2012-04-11T08:41:23.080 回答