Pas de Main () dans WPF?

Je suis un débutant en matière de programmation, mais j’étais sûr que l’une des règles universelles était qu’un programme commence par Main (). Je n’en vois pas quand je crée un projet WPF. Est-ce que Main () s’appelle simplement quelque chose de différent dans WPF?

Il est généré lors de la construction, mais vous pouvez fournir le vôtre (en le désambiguïsant dans les propriétés du projet si nécessaire). Rechercher dans obj / debug pour un fichier d’application; J’ai (gracieuseté de “C # 2010 Express”) App.gics avec:

 namespace WpfApplication1 { ///  /// App ///  [System.CodeDom.Comstackr.GeneratedCodeAtsortingbute("PresentationBuildTasks", "4.0.0.0")] public partial class App : System.Windows.Application { ///  /// InitializeComponent ///  [System.Diagnostics.DebuggerNonUserCodeAtsortingbute()] public void InitializeComponent() { #line 4 "..\..\..\App.xaml" this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative); #line default #line hidden } ///  /// Application Entry Point. ///  [System.STAThreadAtsortingbute()] [System.Diagnostics.DebuggerNonUserCodeAtsortingbute()] public static void Main() { WpfApplication1.App app = new WpfApplication1.App(); app.InitializeComponent(); app.Run(); } } } 

La méthode Main () est créée automatiquement. Si vous voulez fournir les vôtres, vous devez (testé dans VS2013 et VS2017):

  • Cliquez avec le bouton droit sur App.xaml dans l’explorateur de solutions, sélectionnez Propriétés.
  • Remplacez “Build Action” par “Page” (la valeur initiale est “ApplicationDefinition”)

Ajoutez simplement une méthode Main () à App.xaml.cs. Ça pourrait être comme ça:

 [STAThread] public static void Main() { var application = new App(); application.InitializeComponent(); application.Run(); } 

Main() est automatiquement fourni par le CLR et le WPF.

Le compilateur C # prend un commutateur de ligne de commande /m qui spécifie le type qui contient l’implémentation de Main() . Par convention, si aucun object de démarrage n’est explicitement spécifié, le CLR recherchera toute classe ayant une méthode Main() statique Main() et l’appellera. (Comme l’a souligné @Marc Gravel dans son commentaire)

Dans le cas de WPF, le App.xaml Main() est automatiquement généré lorsque App.xaml est généré et le commutateur / m est spécifié pour que le compilateur C # utilise cette classe comme point d’entrée. Si vous examinez les propriétés du projet, vous trouverez toutefois un paramètre vous permettant de choisir l’object de démarrage. Donc, si vous voulez, vous pouvez fournir votre propre classe qui implémente Main() .

Notez que vous devrez créer l’instance d’ Application et appeler sa méthode Run() pour vous assurer que l’infrastructure WPF est correctement démarrée.

Main() est généré lors de la compilation. Vous pouvez le trouver dans App.g.cs (dans le dossier obj/{Debug,Release} ).

main() est un point d’entrée standard pour une application, mais toutes les applications sont structurées de cette manière. Dans un projet XAML, le fichier App.XAML spécifie le point d’entrée où il est indiqué StartupUri="MainWindow.xaml" .

Comme d’autres le disent, la fonction principale est générée en fonction du contenu des fichiers XAML du projet.

J’ai copié des fichiers qui ne seraient pas chargés dans un autre projet sans fenêtre principale dans une nouvelle, et j’ai eu cette erreur.

Pour moi, il a fallu adopter une approche opposée à celle d’Andreas Kahler:

Après avoir créé un fichier de fenêtre et défini l’uri au démarrage de ce fichier, j’ai basculé Page vers ApplicationDefinition de la propriété App.xaml ‘Build Action’.