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

3
我有一个WinForms应用程序,使用Process.Start启动运行WPF进程。我想知道何时WPF进程完成加载,我可以访问process.MainWindowHandle属性(在完全加载之前为0)。
我尝试轮询,但句柄始终为0。但是,如果我等待WPF应用程序加载完成(在Process.Start之后),然后进行调试 - 我将获得正确的句柄。
不起作用:
int maxCount=100000;
int count=0;
do
{
    wpfProcess.WaitForInputIdle();
    _hWnd = net4ReconProcess.MainWindowHandle;
    count++;
} while (_hWnd.ToInt32() == 0 || count > maxCount);

以上代码中,net4ReconProcess是什么? - VivekDev
2个回答

6
在while循环中添加process.Refresh();

0

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

正如 Raymond 所说,它应该真正被称为 WaitForProcessStartupComplete

你应该使用这段代码:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接