Je suis un débutant quand il s'agit 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. Main() est-il simplement nommé différemment dans WPF?Non Main() dans WPF?
Répondre
Il est généré au cours de la construction, mais vous pouvez en créer un (en le désambiguant dans les propriétés du projet si nécessaire). Regardez dans obj/debug pour un fichier d'application; J'ai (avec la permission de "C# 2010 Express") App.g.i.cs
avec:
namespace WpfApplication1 {
/// <summary>
/// App
/// </summary>
[System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
public partial class App : System.Windows.Application {
/// <summary>
/// InitializeComponent
/// </summary>
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public void InitializeComponent() {
#line 4 "..\..\..\App.xaml"
this.StartupUri = new System.Uri("MainWindow.xaml", System.UriKind.Relative);
#line default
#line hidden
}
/// <summary>
/// Application Entry Point.
/// </summary>
[System.STAThreadAttribute()]
[System.Diagnostics.DebuggerNonUserCodeAttribute()]
public static void Main() {
WpfApplication1.App app = new WpfApplication1.App();
app.InitializeComponent();
app.Run();
}
}
}
La même chose existe également dans 'App.g.cs'. Mais j'ai essayé d'ajouter 'Main()' et chaque fois que je reconstruisais mon projet, il revenait à ce que tu avais, ici. J'ai essayé de créer le mien dans une autre classe, mais Project Properties ne trouve que MyProject.App, pas l'autre classe, donc je ne peux pas le rediriger. – vapcguy
Main()
est généré pendant 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 façon. Dans un projet XAML, le fichier App.XAML spécifie le point d'entrée où il est indiqué StartupUri="MainWindow.xaml"
.
Comme cela est indiqué par d'autres, la fonction principale réelle est générée sur la base du contenu des fichiers XAML dans le projet.
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 objet de démarrage n'est explicitement spécifié, le CLR recherchera toute classe ayant une méthode Main()
statique et l'appellera. (Comme @Marc Gravel a souligné dans son commentaire)
Dans le cas de WPF, le Main()
est généré automatiquement lorsque App.xaml
est construit et le commutateur/m est spécifié pour que le compilateur C# utilise cette classe comme point d'entrée. Cependant, si vous regardez les propriétés du projet, vous trouverez un paramètre vous permettant de choisir l'objet de démarrage. Donc, si vous le souhaitez, vous pouvez fournir votre propre classe qui implémente Main()
. Notez que cela vous mettra la responsabilité de créer l'instance Application
et d'appeler sa méthode Run()
pour vous assurer que l'infrastructure WPF est correctement démarrée.
En fait, sans '/ m' il ne se soucie pas de savoir quel type est appelé; Si vous n'êtes pas explicite, il essaie juste de trouver ** n'importe quelle méthode 'Main' appropriée, et se plaint s'il en trouve 0 ou plus d'un. A titre d'exemple, l'exemple "Hello World" dans la spécification de langage (§1.1) utilise "Hello" comme nom de type. –
Pour être pédant: il n'est pas vraiment précis de dire que 'main()' est fourni par le CLR (le runtime), c'est vraiment le compilateur qui le génère. –
Ajout de mon +1 pour rappeler au public qu'ils devront ajouter dans leur propre instance d'application (ieApplicationApp MyApp.Application = new MyApp.App(); ') et appeler' .Run() 'dessus, comme le précédent 'Main()' aurait. Bon appel. De plus, il faudrait ajouter 'app.InitializeComponent();' avant 'app.Run()', et heureusement pour nous, la méthode originale 'InitializeComponent()' est toujours là (vu dans App.g.cs, donc non besoin d'ajouter celui-là!). – vapcguy
La méthode Main() est créée automatiquement. Si vous voulez fournir votre propre que vous avez à (testé dans VS2013 et VS2017):
- bouton droit sur App.xaml dans l'explorateur de solution, sélectionnez Propriétés
- Change « Build Action » à « Page » (la valeur initiale est 'ApplicationDefinition')
Puis ajoutez simplement une méthode Main() à App.xaml.cs. Il pourrait ressembler à ceci:
[STAThread]
public static void Main()
{
var application = new App();
application.InitializeComponent();
application.Run();
}
Le conseil d'action de construction était la clé, merci – joshcomley
Impressionnant! devrait être la réponse acceptée. – Jack
Qu'est-ce que '[STAThread]'? Je suis aussi un débutant et je ne sais pas ... – Jepessen
je copiais des fichiers qui ne se charge pas dans un autre projet qui était sans mainwindow dans une nouvelle et a cette erreur.
Pour moi, il a fallu faire face l'approche de Andreas Kahler pour fixer:
Après avoir fait un fichier de la fenêtre et le réglage de la mise en service uri ce fichier à la page je suis passé ApplicationDefinition de App.xaml « Build Action » propriété.
- 1. Ajout de void main() wpf
- 2. Maven/Eclipse/WTP -/src/main/ressources non déployées
- 3. Pourquoi main() dans java est-il vide?
- 4. class Main dans un paquet?
- 5. Liste Useage Pas dans Main() -
- 6. WPF Trigger non null
- 7. non-travail WPF Reliure
- 8. WPF: IU non bloquante
- 9. WPF: Fenêtre non focalisable
- 10. WPF: OnMouseLeftButtonDown non appelé
- 11. Comment créer TreeViewItem non sélectionnable dans WPF
- 12. mouvement non laggy dans Flex ou WPF
- 13. Non ContextMenuChanging (ed) événement dans WPF
- 14. Scroll Viewer non visible dans wpf DataGrid
- 15. Contrôle personnalisé wpf non reconnu
- 16. WPF TypeConverter ConvertTo non déclenché
- 17. WPF ListView défilement non intégral
- 18. WPF ListView SelectedValue non défini
- 19. Pourquoi int main() {} compile?
- 20. courte main instruction if
- 21. wpf Fenêtre Largeur non contractuelle
- 22. Pourquoi dans le bouton de type d'entrée le curseur est une flèche et non une main?
- 23. Dans la fonction `_start ': init.c :(. Text + 0x30): référence non définie à` main'
- 24. Choisir quel main() utiliser dans le Makefile
- 25. retourne la valeur de main() dans Windows
- 26. Threading requêtes Web traitées dans Main?
- 27. WPF Impression FlowDocument non centré
- 28. Omaha Salut main Evaluator
- 29. Boost :: Test - génération de Main()?
- 30. Glisser Drop dans WPF ToolWindow dans VS2010 Extension non autorisé
Vous pouvez obtenir la fonctionnalité équivalente en remplaçant OnStartup dans App.xaml.cs. StartupEventArgs.Args contient les arguments de la ligne de commande. – Foole
@Foole, non, vous ne pouvez pas, voir [this] (http://stackoverflow.com/q/22460116/1997232) question. – Sinatr