What is the entry point of a WPF application?

C#.NetWpfC# 4.0

C# Problem Overview


The Main method is the entry point of a C# console application. Thus, for example, if I have to start some threads or services, I will do it within the Main method.

I do not see the Main method inside a WPF project, so what is the entry point of a WPF application? If I have to start some threads or services, where should write the code for starting them?

UPDATE: this answer summarizes the available solutions, but what are the pros and cons of each solution?

C# Solutions


Solution 1 - C#

For a WPF standalone application that is generated in Visual Studio using the New Project wizard, the entry point for the application is the Main function, defined in App.g.cs (generated code). In the default project, this is the public static void App.Main method.

Check this

In general, a .NET application will use as its entry point (first function called) any method named Main that has public/static access modifiers–no matter what class Main is located in.

If your application has more than one class with a public static Main method, you’ll need to specify the entry point in the project properties dialog. In the Startup object dropdown, select the class that contains the Main method that should be called on startup.

Solution 2 - C#

Your main entry point is an override of OnStartup in the code-behind of App.Xaml :

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        // here you take control
    }
}

Other points of interest might be Application.OnActivate() and the Loaded and Initialized events of your MainWindow.

> If I have to start some threads or services, where should write the code for starting them?

Depends on what those threads/services need and want.

Solution 3 - C#

The Main for a WPF application is autogenerated and can be found in one of the .cs files that backs your App.xaml file. You can expand App.xaml -> App.xaml.cs -> App -> Main() in the solution explorer, which will get you to the App.g.i.cs source file, which contains your Main() function.

This file is auto-generated, so rather than editing the Main there, I would recommend creating a new .cs file in your project that contains the Main() function. You then have to change the properties of your project to specify the correct startup object. This is done on the Application tab in your project properties. Set it to the class that contains your custom Main function.

You probably want to copy the contains of the autogenerated Main into your new one, since you want your application to behave normally (show the main window, etc.).

Solution 4 - C#

Entry point is App.xaml.cs typically.

You want to avoid putting code there ideally. Instead try instantiating them in view models for MVVM. It's typically a tricky place to find stuff - as your question is testament to.

Another alternative, load them in a helper class and then instantiate that in the app.xaml file.

Solution 5 - C#

You can declare a constructor in your App.xaml.cs file.

public partial class App : Application
{
    public App()
    {
        //initialize your app
    }
}

The Main function is declared In App.g.i.cs, and constructing your App is the first thing that happens:

public static void Main() {
    MyWPF.App app = new MyWPF.App(); //calls your constructor
    app.InitializeComponent();
    app.Run();
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionenzom83View Question on Stackoverflow
Solution 1 - C#Rajendra TripathyView Answer on Stackoverflow
Solution 2 - C#Henk HoltermanView Answer on Stackoverflow
Solution 3 - C#lordjebView Answer on Stackoverflow
Solution 4 - C#kidshawView Answer on Stackoverflow
Solution 5 - C#RichardView Answer on Stackoverflow