我读了一些关于MainWindowHandle的线程,但是我无法找到解决我的问题的方法,我正在启动一个gui应用程序,并希望通过进程对象获取MainWindowHandle,但如果我是,则句柄值始终为零在加载gui之前不要等待thread.sleep()。我也尝试使用WaitForInputIdle,但它根本没有帮助。
process.Start();
process.WaitForInputIdle(1000);
while (process.MainWindowHandle == IntPtr.Zero)
{
Thread.Sleep(100);
}
// do something with the handle
他永远不会离开,如果我用正常的thread.sleep替换waitforinputidle,他会把握正确的句柄。
用简单的话说:我只想继续我的代码,如果我得到一个句柄!=零,但我不想等待一个静态时间这个
答案 0 :(得分:8)
缓存存储在MainWindowHandle中的值。在循环中添加process.Refresh()以使该值无效:
while (process.MainWindowHandle == IntPtr.Zero)
{
Thread.Sleep(100);
process.Refresh();
}