Main nelle applicazioni WPF visual studio

venerdì 24 gennaio 2014 - 16.28
Tag Elenco Tags  C#

_Andreino10 Profilo | Newbie

Salve a tutti, sono nuovo sul forum e non un grande esperto di programmazione, se ci fosse qualcuno in grado di aiutarmi vorrei chiedere una cosa:
Quando col "visual studio 2010" inizio un nuovo progetto WPF il main si autogenera ed è nascosto.. io vedo solo la classe mainwindow.xml e il suo codice (mainwindow.xml.cs) io vorrei andare a modificare il Main del programma, ma quando vi accedo, trov un'istanza di oggetto della classe App.. ma il codice della classe App è vuoto.. e non so a cosa serva.. qualcuno riesce a spiegarmi cos'è la classe app e come agire nel main? Se è lungo e non avete voglia di spiegarmi magari mandatemi un link conun manuale chiaro..
Scusate il disturbo e Grazie in anticipo :)

0v3rCl0ck Profilo | Guru

>Salve a tutti, sono nuovo sul forum e non un grande esperto di
>programmazione, se ci fosse qualcuno in grado di aiutarmi vorrei
>chiedere una cosa:
>Quando col "visual studio 2010" inizio un nuovo progetto WPF
>il main si autogenera ed è nascosto.. io vedo solo la classe
>mainwindow.xml e il suo codice (mainwindow.xml.cs) io vorrei
>andare a modificare il Main del programma, ma quando vi accedo,
>trov un'istanza di oggetto della classe App.. ma il codice della
>classe App è vuoto.. e non so a cosa serva..

Si hai ragione, il metodo Main infatti è generato durante la fase di build in una partial class legata appunto alla stessa App.xaml.cs, e per curiosità puoi trovare il file contenente il Main method in App.g.cs (o App.g.i.cs) in obj\debug ... nulla ti vieta di avere il tuo custom main method (http://sudhirdotnet.wordpress.com/2011/09/27/wpf-adding-a-custom-main-method-in-wpf-application-2/), ma di solito non serve quasi mai interagire sul main method perchè puoi fare tutto appunto dal App.xaml file.

Ad esempio per eseguire codice all'avvio dell'applicazione ma prima di mostrare la main window, potresti togliere lo StartupUri dall'App.xaml, e aggiungere questo metodo all App.xaml.cs:

using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows; namespace WpfApplication1 { /// <summary> /// Interaction logic for App.xaml /// </summary> public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { // mio codice prima di aprire la main view var mainView = new MainWindow(); mainView.Show(); } } }

>qualcuno riesce a spiegarmi cos'è la classe app e come agire nel main?

in poche parole è il punto di accesso della tua applicazione, perchè deriva da Application, che contiene tutte le informazioni riguardanti la tua applicazione WPF (risorse, mainwindow, dispatcher, ... http://msdn.microsoft.com/en-us/library/system.windows.application(v=vs.110).aspx) e come vedrai nel codice generato del Main, è proprio l'unica classe che viene istanziata ed utilizzata nel main:

/// <summary> /// Application Entry Point. /// </summary> [System.STAThreadAttribute()] [System.Diagnostics.DebuggerNonUserCodeAttribute()] [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")] public static void Main() { WpfApplication1.App app = new WpfApplication1.App(); app.Run(); }

di fatto se non esegui il metodo Run di un System.Windows.Application, non hai un'applicazione wpf che gira

l'altro modo praticamente identico per eseguire codice all'avvio dell'applicazione è collegandosi all'evento Startup come descritto qui: http://msdn.microsoft.com/en-us/library/system.windows.application.startup(v=vs.110).aspx
nel metodo che ti ho messo io invece, ho semplicemente fatto l'override del metodo che serve per notificare l'evento (http://msdn.microsoft.com/en-us/library/system.windows.application.onstartup(v=vs.110).aspx)... scegliere tra l'uno o l'altro? è uguale, io preferisco l'override perchè così non devo andare a scrivere niente sul file xaml, però attenzione perchè se hai anche collegato l'evento Startup e nell'override non esegui base.OnStartup, l'evento non viene scatenato.


Ciao,
Michael Denny
Software Developer & Architect
http://blogs.dotnethell.it/Regulator/
http://dennymichael.wordpress.com
Twitter: @dennymic
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5