从Windows窗体加载WPF窗口时询问System.ExecutionEngineeException

从Windows窗体加载WPF窗口时询问System.ExecutionEngineeException,wpf,winforms,integration,Wpf,Winforms,Integration,我发现了一些相当奇怪的行为 下面是如何复制问题: 创建WPF应用程序项目 从App.xaml文件中删除StartupUri 将启动事件处理程序添加到具有签名“private void Application\u Startup(object sender,StartupEventArgs e)”的应用程序 现在,将表单添加到项目中(右键单击并选择AddNewItem) 在Application_Startup方法中,创建表单对象并将其显示为Form1 f1=new Form1();f1.Show

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

下面是如何复制问题:

  • 创建WPF应用程序项目
  • 从App.xaml文件中删除StartupUri
  • 将启动事件处理程序添加到具有签名“
    private void Application\u Startup(object sender,StartupEventArgs e)
    ”的应用程序
  • 现在,将表单添加到项目中(右键单击并选择AddNewItem)
  • 在Application_Startup方法中,创建表单对象并将其显示为
    Form1 f1=new Form1();f1.ShowDialog()
  • 在实际的Form1上,向设计器添加一个按钮,并向按钮添加一个click事件处理程序
  • 向项目中添加一个新的WPF窗口Window1
  • 在Form1的按钮中,单击步骤6中创建的事件处理程序,添加代码行以创建显示WPF窗口:
    window1w1=newwindow1();w1.Show()
  • 运行项目并单击winform上的按钮以显示WPF窗口。。。到目前为止效果很好。
  • 关闭WPF窗口并再次单击winform的按钮。这次你应该得到例外
  • 所以,本质上我要做的是创建一个WPF应用程序,它显示一个winform。然后,winform显示一个WPF窗口

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

    我也尝试过在上提出的各种建议,但这些都没有帮助


    为什么会发生这种情况?

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


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

    +1。如果要结束进程(例如winform),是否仍需要调用Application.Current.Shutdown()?如果是,如果没有,会发生什么?您显示了xaml,因为我在WinForms应用程序中添加了WPF窗口,所以在Program.cs中没有app.xaml,所以我在创建System.Windows.application的新实例时添加了它<代码>System.Windows.Application.Current.ShutdownMode=ShutdownMode.OnExplicitShutdown