Sono un principiante quando si parla di programmazione, ma ero sicuro che una delle regole universali era che un programma inizia con Main(). Non ne vedo uno quando creo un progetto WPF. Main() ha semplicemente chiamato qualcosa di diverso in WPF?No Main() in WPF?
risposta
Viene generato durante la compilazione, ma è possibile fornire il proprio (disambigendolo nelle proprietà del progetto, se necessario). Cerca in obj/debug per un file app; Ho (per gentile concessione di "C# 2010 Express") App.g.i.cs
con:
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 stessa cosa esiste anche in "App.g.cs". Ma ho provato ad aggiungere a 'Main()' e ogni volta che ricostruivo il mio progetto, tornava a quello che hai, qui. Ho cercato di crearne di propri in un'altra classe, ma Project Properties trova solo MyProject.App, non l'altra classe, quindi non può reindirizzarlo. – vapcguy
Main()
viene generato durante la compilazione. Puoi trovarlo in App.g.cs
(nella cartella obj/{Debug,Release}
).
main()
è un punto di ingresso standard per un'applicazione, ma tutte le applicazioni sono strutturati in questo modo. In un progetto XAML, il file App.XAML specifica il punto di ingresso dove viene indicato StartupUri="MainWindow.xaml"
.
Come indicato da altri, la funzione principale effettiva viene generata in base al contenuto dei file XAML nel progetto.
Main()
viene fornito automaticamente dal CLR e dal WPF.
Il compilatore C# accetta uno switch da riga di comando /m
che specifica il tipo che contiene l'implementazione di Main()
. Per convenzione, se non viene specificato esplicitamente alcun oggetto di avvio, CLR cerca qualsiasi classe che abbia un metodo statico Main()
e la chiamerà. (Come @ Marc Gravel sottolineato nel suo commento)
Nel caso del WPF, il Main()
viene generato automaticamente quando App.xaml
è costruito e il m interruttore/è specificato per rendere il compilatore C# utilizzare tale classe come punto di ingresso. Tuttavia, se si guardano le proprietà del progetto, si troverà un'impostazione per scegliere l'oggetto di avvio. Quindi, se lo desideri, puoi fornire la tua classe che implementa Main()
.
Si noti che questo vi darà la responsabilità di creare l'istanza Application
e di chiamare il suo metodo Run()
per garantire che l'infrastruttura WPF sia avviata correttamente.
In realtà, senza '/ m' non * cura * come viene chiamato il tipo; se non sei esplicito, prova a trovare ** qualsiasi ** metodo 'Main' adatto, e si lamenta se trova 0 o più di uno. Ad esempio, l'esempio "Hello World" nella specifica della lingua (§1.1) utilizza 'Hello' come nome del tipo. –
Essere pedante: non è molto preciso dire che 'main()' è fornito dal CLR (il runtime), è davvero il compilatore che lo genera. –
Aggiunto il mio +1 per ricordare al pubblico che dovranno aggiungere nella propria istanza dell'applicazione (ad esempio 'App MyApp.App = new MyApp.App();') e chiamare '.Run()' su di esso, come il precedente 'Main()' avrebbe. Buona chiamata Inoltre, dovremmo aggiungere 'app.InitializeComponent();' prima di 'app.Run()', e fortunatamente per noi, il metodo originale 'InitializeComponent()' è ancora lì (visto in App.g.cs, quindi no è necessario aggiungere quello indietro!). – vapcguy
Il metodo Main() viene creato automaticamente. Se si desidera fornire il proprio dovete (testato in VS2013 e VS2017):
- pulsante destro del mouse App.xaml nella soluzione Explorer, selezionare Proprietà
- Change 'Build azione' a 'Pagina' (il valore iniziale è 'ApplicationDefinition')
Quindi basta aggiungere un metodo Main() a App.xaml.cs. Potrebbe essere simile a questo:
[STAThread]
public static void Main()
{
var application = new App();
application.InitializeComponent();
application.Run();
}
Il suggerimento per la build era la chiave, grazie – joshcomley
Fantastico! dovrebbe essere la risposta accettata – Jack
Cosa significa '[STAThread]'? Sono anche un principiante e non lo so ... – Jepessen
ho copiato i file che non sarebbe caricare in un altro progetto, che era senza un MainWindow in uno nuovo e ottenuto questo errore.
Per me ci sono voluti fare un approccio opposto a Andreas Kahler per risolvere:
Dopo aver effettuato un file finestra e impostando l'URI di avvio per questo file sono passato alla Pagina ApplicationDefinition di App.xaml 'Build Azione' proprietà.
- 1. Gradle- no main manifest attributo
- 2. Eccezione nel thread "main" java.lang.UnsatisfiedLinkError: no jpcap in java.library.path
- 3. Eccezione nel thread "main" java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
- 4. WPF Mouse down evento no Coordinate
- 5. TextBox WPF con SpellCheck.IsEnabled = "True" - No SpellChecking in corso?
- 6. No System.Web in VS2010
- 7. exiting functions in main
- 8. Dov'è main() in Android?
- 9. Differenza tra main (void) e main() in C
- 10. Differenza tra void main e int main?
- 11. FileNotFoundException in src/main/resources
- 12. eccezione Catching in Main() metodo
- 13. Metodi multipli main() in java
- 14. WPF: Visualizza un valore booleano come "Sì"/"No"
- 15. ComboBox WPF. Evento associato selezionato. esiste o no?
- 16. no ocijdbc12 in java.library.path
- 17. Java - public static void main()
- 18. definizioni legali di main() in C++ 14
- 19. NSThread sleepfortimeinterval blocks main thread
- 20. bower.json: main è presente ma ottengo un "(...) mancante" main "entry in bower.json" warning
- 21. `riferimento non definito a` main` nella classe Cpp senza main()
- 22. Differenza tra int main() e int main (void)?
- 23. dove dichiarare le strutture, dentro main() o outside main()?
- 24. Parametri a main con requireJS e data-main
- 25. Eccezione nella discussione "main" java.util.NoSuchElementException
- 26. UnsatisfiedLinkError: no opencv_java249 in java.library.path
- 27. Groovy - metodo Main posizionamento
- 28. programma Quine senza main()
- 29. Cosa significa exit (main())
- 30. Run Flash in WPF
È possibile ottenere la funzionalità equivalente sovrascrivendo OnStartup in App.xaml.cs. StartupEventArgs.Args contiene gli argomenti della riga di comando. – Foole
@Foole, no, non puoi, vedi [questo] (http://stackoverflow.com/q/22460116/1997232) domanda. – Sinatr