WaitforInputIdle无法正常工作

时间:2016-08-31 05:08:25

标签: c# wpf prism mef

我正在尝试从我的WPF应用程序启动一个进程。该进程也是使用PRISM / MEF框架开发的WPF应用程序。

import { AlertController } from 'ionic-angular';

export class MyPage {
  constructor(public alertCtrl: AlertController) {
  }

  showAlert() {
    let alert = this.alertCtrl.create({
      title: 'New Friend!',
      subTitle: 'Your friend, Obi wan Kenobi, just accepted your friend request!',
      buttons: ['OK']
    });
    alert.present();
  }
}

问题在于PRISM / MEF应用程序,因为进程WaitForInputIdle()不起作用。我尝试在WaitForInputIdle()之后打印mainwindowHandle及其零。

虽然我尝试打开像notepad.exe这样的其他进程,但WaitForInputIdle()工作并打印窗口句柄。

现在我正在使用此解决方法,但有人可以说明为什么WaitForInputIdle()无法正常工作吗?

 var process = Process.Start(processPath);
 process.WaitForInputIdle();
 Console.WriteLine(process.MainWindowHandle);

 //rest of the code  

1 个答案:

答案 0 :(得分:1)

Process.WaitForInputIdle() method只是等待进程的消息循环进入空闲状态。与您的循环一样WaitForInputIdle()也是一种变通方法,它没有专门编码以等待创建MainWindowHandle。因此,根据应用程序的工作方式,无法保证在方法返回时创建窗口句柄。

至少大多数Windows的内置应用程序使用与Windows窗体应用程序相同的方法来启动应用程序并创建第一个窗口。在这些情况下,标准行为,当创建窗口句柄并显示窗口时,进程将进入空闲状态。

WPF,Prism和MEF的工作方式与WinForms略有不同,因此无法保证在应用程序最终进入空闲状态时已创建窗口句柄。不幸的是,我不太喜欢WPF,Prism或MEF,所以我甚至无法提供关于这种行为的理论。