Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Question System.ExecutionEngineException while loading WPF window from Windows Form

I found some rather strange behavior...

Here is how to replicate the problem:

  1. Create a WPF Application Project.
  2. Remove the StartupUri from the App.xaml file.
  3. Add a Startup Event Handler to the App with signature "private void Application_Startup(object sender, StartupEventArgs e)"
  4. Now, add a Form to the project (right click and select add new item).
  5. in the Application_Startup method, create the form object and show it like Form1 f1 = new Form1(); f1.ShowDialog();
  6. On the actual Form1, add a button to the designer, and add a click event handler to the button.
  7. Add a new WPF window to your project, Window1.
  8. In the Form1's button click event handler created in step 6, add the lines of code to create display the WPF window: Window1 w1 = new Window1(); w1.Show();
  9. Run the project and click the button on the winform to show the WPF window... works fine so far.
    1. Close the WPF window and click the winform's button again. This time you should get the exception.

So, essentially what I do is create a WPF application that displays a winform. Then, the winform displays a WPF Window.

The first time the WPF window is displayed, everything works fine. If it is closed, and then re-opened, I get the exception! I can also open up multiple WPF windows by clicking the button multiple times. Once the last one is closed, however, I can never open another one again without the exception...

I have also tried the various tips suggested at http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/442782b1-00a1-4e2e-9cc6-ae99b6699126/ but those don't help.

Why is this happening?

like image 962
Bogdan Varlamov Avatar asked Dec 02 '08 18:12

Bogdan Varlamov


People also ask

How do I add a system window form in WPF?

Say, you want to use Windows Forms' ListBox control in your WPF application, you simply have to add the below code inside your Grid tag in XAML. The WindowsFormsHost tag is used to host Windows Forms control and wf:ListBox tag represents the Windows Forms ListBox.

Is WPF better than Windows Forms?

Windows forms are poor in providing consistency. WPF provides more consistency across the applications. In Windows forms, UI has been designed with the help of the language of business logic code. In WPF, it uses the XAML as a markup language to design the UI part of the application.

How call WPF in Windows form?

In the main section you should see "WPF Custom Control Library" click on it and then name it what you would like and click ok. Add a Window(WPF) control to the project, this window would be the WPF window that you want to open. Then from the WinForm, open it like so: var wpfwindow = new WPFWindow.

Is WPF and Windows Form same?

It is simple to use WinForms as controls can be used easily, it's less time-consuming and less tricky as compared to WPF. It has an inbuilt story boarding feature and animation model, it has the ability to use business objects in UI declaratively. It does not provide such features.


1 Answers

The default Wpf applicationshutdown behavior (specified on the "Application" tab in project properties in VS or using the ShutdownMode attribute in Application.Xaml) is "On Last Window Close". This means that when you close the Wpf window you create, Wpf shuts down the application framework so any subsequent window creations will throw an exception.

You can avoid this problem by setting the Shutdown mode to "On explicit shutdown" ("OnExplicitShutdown" in Xaml). You will then need to manually call Application.Current.Shutdown explicitly when you want the app to terminate (e.g. when the winforms form is closed).

like image 67
fubaar Avatar answered Sep 29 '22 00:09

fubaar