c#MainWindowHandle始终为零

don*_*are 2 c# process handle

我读了一些关于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
Run Code Online (Sandbox Code Playgroud)

他永远不会离开,如果我用正常的线程替换waitforinputidle.睡觉他得到正确的句柄.

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

Tun*_*ung 8

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

while (process.MainWindowHandle == IntPtr.Zero)
{
    Thread.Sleep(100);
    process.Refresh();
}
Run Code Online (Sandbox Code Playgroud)

  • 这就是解决方案,谢谢.但是waitforinputidle扮演的角色是怎样的?阅读msdn:http://msdn.microsoft.com/en-us/library/system.diagnostics.process.mainwindowhandle.aspx它应该有助于解决句柄"未准备好"的问题 (2认同)