代码之家  ›  专栏  ›  技术社区  ›  TheSean

在启动Process.Start()后等待WPF应用程序加载

  •  2
  • TheSean  · 技术社区  · 16 年前

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

    我试过轮询,但句柄始终为0。但是,如果我调试并等待(在 进程.开始 )让WPF应用程序加载-然后我将得到正确的句柄。

    int maxCount=100000;
    int count=0;
    do
    {
        wpfProcess.WaitForInputIdle();
        _hWnd = net4ReconProcess.MainWindowHandle;
        count++;
    } while (_hWnd.ToInt32() == 0 || count > maxCount);
    
    2 回复  |  直到 16 年前
        1
  •  5
  •   Wolf    9 年前

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

        2
  •  1
  •   Wolf    9 年前

    使用while循环 WaitForInputIdle 是无意义的,因为此调用将阻塞当前线程,直到另一个进程完成其初始化。之后,它总是立即返回。请看帖子 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;