从Windows窗体加载WPF窗口时出现问题System.ExecutionEngineException

时间:2008-12-02 18:54:59

标签: wpf winforms integration

我发现了一些相当奇怪的行为......

以下是如何复制问题:

  1. 创建WPF应用程序项目。
  2. 从App.xaml文件中删除StartupUri。
  3. 使用签名“private void Application_Startup(object sender, StartupEventArgs e)
  4. 将启动事件处理程序添加到应用程序
  5. 现在,向项目添加一个表单(右键单击并选择添加新项目。)
  6. 在Application_Startup方法中,创建表单对象并将其显示为Form1 f1 = new Form1(); f1.ShowDialog();
  7. 在实际的Form1上,向设计器添加一个按钮,并向该按钮添加一个单击事件处理程序。
  8. 向项目Window1添加新的WPF窗口。
  9. 在步骤6中创建的Form1的按钮单击事件处理程序中,添加代码行以创建显示WPF窗口:Window1 w1 = new Window1(); w1.Show();
  10. 运行项目并单击winform上的按钮以显示WPF窗口...到目前为止工作正常。
    1. 关闭WPF窗口,然后再次单击winform按钮。这次你应该得到例外。
  11. 因此,基本上我所做的是创建一个显示winform的WPF应用程序。然后,winform显示一个WPF窗口。

    第一次显示WPF窗口时,一切正常。如果它关闭,然后重新打开,我得到例外!我也可以通过多次单击按钮来打开多个WPF窗口。然而,一旦最后一个关闭,我再也无法再打开另一个......

    我也尝试了http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/442782b1-00a1-4e2e-9cc6-ae99b6699126/建议的各种提示,但这些提示无效。

    为什么会这样?

1 个答案:

答案 0 :(得分:10)

默认的Wpf applicationshutdown行为(在VS的项目属性中的“应用程序”选项卡上指定或使用Application.Xaml中的ShutdownMode属性)是“在最后一个窗口关闭”。这意味着当你关闭你创建的Wpf窗口时,Wpf会关闭应用程序框架,以便任何后续窗口创建都会抛出异常。

您可以通过将关闭模式设置为“On explicit shutdown”(Xaml中的“OnExplicitShutdown”)来避免此问题。然后,当您希望应用程序终止时,您需要手动调用Application.Current.Shutdown(例如,当winforms表单关闭时)。