c#MainWindowHandle始终为零

我读了一些关于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 

他永远不会离开,如果我用正常的thread.sleep替换waitforinputidle他会把握正确的句柄。

用简单的话说:我只想继续我的代码,如果我得到一个句柄!=零,但我不想等待一个静态的时间

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

 while (process.MainWindowHandle == IntPtr.Zero) { Thread.Sleep(100); process.Refresh(); }