从Process.Start()开始后等待WPF应用程序加载

时间:2010-07-14 14:29:21

标签: wpf process

我有一个WinForms应用程序启动使用Process.Start运行的wpf进程。我想知道WPF进程何时完成加载,我可以访问process.MainWindowHandle属性(在完全加载之前它的0)。

我尝试了轮询,但句柄始终为0.但是,如果我调试并等待(Process.Start之后)加载WPF应用程序 - 我将获得正确的句柄。

不起作用:

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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;