2010-07-14 73 views
2

我有一个WinForms应用程序,开始使用Process.Start运行的WPF过程。我想知道当WPF程序加载完成,我可以访问process.MainWindowHandle属性(其0之前,其完全地加载)。我试着轮询,但句柄总是0.但是,如果我调试并等待(在Process.Start之后)为WPF应用程序加载 - 然后我将得到正确的句柄。等待WPF应用程序与的Process.Start开始后加载()

不起作用:

int maxCount=100000; 
int count=0; 
do 
{ 
    wpfProcess.WaitForInputIdle(); 
    _hWnd = net4ReconProcess.MainWindowHandle; 
    count++; 
} while (_hWnd.ToInt32() == 0 || count > maxCount); 
+0

什么是net4ReconProcess在顺便把上面的代码? – VivekDev 2016-05-08 09:31:46

回答

5

添加process.Refresh();到while循环。

0

使用了WaitForInputIdle while循环是无感,因为这个调用阻塞当前线程,直到其他进程已完成初始化。之后,它总是立即返回。请阅读文章WaitForInputIdle should really be called WaitForProcessStartupComplete – The Old New Thing

正如雷蒙德所说的那样,它实际上应该被称为WaitForProcessStartupComplete

您应使用此代码:

if (!wpfProcess.WaitForInputIdle(10000)) // 10 s timout 
    throw new ApplicationException("Process takes too much time to start"); 
_hWnd = net4ReconProcess.MainWindowHandle;