c#主窗口句柄始终为零

c#主窗口句柄始终为零,c#,process,handle,C#,Process,Handle,我读了一些关于MainWindowHandle的文章,但是我找不到解决问题的方法,我正在启动一个gui应用程序,希望通过process对象获取MainWindowHandle,但是如果我不使用thread.sleep()等待gui加载,handle值始终为零。我也尝试过使用WaitForInputIdle,但根本没用 process.Start(); process.WaitForInputIdle(1000); while (process.MainWindowHandle == IntPt

我读了一些关于MainWindowHandle的文章,但是我找不到解决问题的方法,我正在启动一个gui应用程序,希望通过process对象获取MainWindowHandle,但是如果我不使用thread.sleep()等待gui加载,handle值始终为零。我也尝试过使用WaitForInputIdle,但根本没用

process.Start();

process.WaitForInputIdle(1000);
while (process.MainWindowHandle == IntPtr.Zero)
{
     Thread.Sleep(100);
}
// do something with the handle
如果我用普通的线程替换waitforinputile,他永远不会离开


简而言之:我只想在获得句柄的情况下继续使用我的代码!=零,但我不想为此等待静态时间

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

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

这就是解决办法,谢谢。但是waitforinputile扮演着怎样的角色呢?阅读msdn:它应该有助于解决句柄“未就绪”的问题@dontcare,我并不完全清楚WaitInputIdle()的实际效果如何。我们只能按照该方法的文档告诉我们的去做——也就是说,它会一直阻塞,直到子对象处于空闲状态。这让人相信空闲意味着孩子有一个
MainWindowHandle
,但是,正如您最初使用此方法时所看到的,这并不完全准确。