none
auf die statische Felder vom gestartete Anwendung zugreifen???

    Frage

  • Hallo,

    bei meinem OOB Silverlight-Anwendung muss nach bestimmte Änderungen die Anwendung neugestartet werde, wegen diverse Berechnungen! Und das mache ich wie folgt:

    AutomationFactory.CreateObject("WScript.Shell").Run(@"C:\OOB\MeineAnwendung.lnk");
    Application.Current.MainWindow.Close();


    Habe aber das Problem, dass beim Programmstart der Zugriff auf die externe Datenbank über WCF etwas lange dauert, daher möchte ich die die ursprüngliche Datenbankabfrage an die neugestartete Anwendung weitergeben, so dass nicht Datenbankabfrage erneut gemacht werden muss.

    Gibt es für mein Vorhaben irgendeine Möglichkeit?


    Gruesse, NUNUI

    Mittwoch, 16. Dezember 2015 11:17

Antworten

  • Jetzt funktioniert es :o)

    Statt new Startseite() habe ich dem RootVisual einen Grid zugewiesen und dann bevor ich die neue Klasse dem RootVisual zuordne lösche ich den Grid und es sieht wie folgt aus:

    (http://www.telerik.com/blogs/changing-silverlight-application-themes-at-runtime)

            public App()
            {
                this.Startup += this.Application_Startup;
                
                InitializeComponent();
            }
    
            private void Application_Startup(object sender, StartupEventArgs e)
            {
                this.RootVisual = new Grid();
                this.ResetRootVisual();
            }
    
            public void ResetRootVisual()
            {
                var rootVisual = Application.Current.RootVisual as Grid;
                rootVisual.Children.Clear();
                rootVisual.Children.Add(new Anmelden());
            }

    Und Dann beim Abmelden mache ich es dann wie folgt:

    var rootVisual = Application.Current.RootVisual as Grid;
    rootVisual.Children.Clear();
    rootVisual.Children.Add(new Anmelden());
                        

    Danke Peter für Deine Unterstützung !!!


    Gruesse, NUNUI

    Mittwoch, 10. Februar 2016 14:55

Alle Antworten

  • Hi,

    nein, diese Option gibt es nicht. Aber ich denke auch, dass der Neustart bei einer halbwegs normalen Anwendung gar nicht notwendig wäre.

    Lager diese "Startberechnungen" in eine Methode aus und ruf diese dann nach Durchführung der Änderungen auf. Dann kannst Du auch auf die vorhandene Verbindung bzw. Datenbankabfrage zugreifen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 16. Dezember 2015 12:15
  • Danke für die Antwort!

    Die Struktur von meinem Programm sieht wie folgt aus:

    App:

    public App() { this.Startup += this.Application_Startup; this.Exit += this.Application_Exit; this.UnhandledException += this.Application_UnhandledException; InitializeComponent();

    } private void Application_Startup(object sender, StartupEventArgs e) { this.RootVisual = new Anmelden(); }

    Anmelden:


    MainPage mynewPage = new MainPage();

    MainPage bord = mynewPage;

    this.Content = mynewPage;


    irgendwie bekomme ich es nicht hin statt 

    AutomationFactory.CreateObject("WScript.Shell").Run(@"C:\OOB\MeineAnwendung.lnk");
    Application.Current.MainWindow.Close();

    meine Anwendung sonst neuzustarten! Geht es auch ohne die Anwendung ganz zu beenden auf Anmelden zu wechseln und auch MainPage zu beenden, so dass dann durch die Anmeldung alles neu erzeugt wird? 


    Gruesse, NUNUI


    • Bearbeitet Nunui Mittwoch, 16. Dezember 2015 16:23
    Mittwoch, 16. Dezember 2015 16:12
  • Hi,

    kannst du nicht auf ein anderes Event hören oder einfach ein "reload" Button einführen? Verstehe leider nicht warum du das Ganze abschießen willst. Sorry.

    VLG, Tobi


    Best Regards. When you see answers and helpful posts, please click Vote As Helpful, Propose As Answer, and/or Mark As Answer. This helps us build a healthy and positive community.

    Samstag, 2. Januar 2016 18:14
  • @Tobi

    entschuldige meine sehr späte Antwort! Der Grund ist, dass die Datenmenge, die ich beim Programmstart über WebServices abfrage sehr groß ist und das Programm muss unter bestimmte Umstände neugestartet werden und eine erneute Abfrage wurde dementsprechend sehr lange dauern.

    Ich habe jetzt die Datenmenge, die beim Programmstart abgefragt werden soll soweit reduziert, dass es beim Programmstart dies kein Problem mehr verursacht!


    Gruesse, NUNUI

    Donnerstag, 28. Januar 2016 15:30
  • Hi,
    es bleibt aber immer nocht die Frage offen, warum Du das Programm neu starten musst. Gerade bei einer OOB Anwendung ist es problemlos möglich, Teile des Programm neu zu instanziieren bei Beibehaltung z.B. der Instanz der Datenzugriffsschicht.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Donnerstag, 28. Januar 2016 21:15
  • Hallo Peter,

    Ich habe eigentlich folgendes vor. Ich möchte erreichen, dass wenn der Benutzer sich abmeldet, das aktuelle Fenster geschlossen wird und das Anmeldefenster erneut angezeigt wird. Ist es möglich das aktuelle Fenster zuschliessen und über public App() das Anmelden neu zu starten?


    Gruesse, NUNUI

    Mittwoch, 10. Februar 2016 11:48
  • Hi,
    wo meldet sich der Anwender ab?

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Mittwoch, 10. Februar 2016 12:07
  • Es ist wie folgt. Wenn die Anwendung gestartet wird, wird über die Klasse App die Seite Anmelden aufgerufen:

    public App()
            {
                this.Startup += this.Application_Startup;
                this.Exit += this.Application_Exit;
                
                InitializeComponent();
            }
    
            private void Application_Startup(object sender, StartupEventArgs e)
            {
                this.RootVisual = new Anmelden();
            }
    
            private void Application_Exit(object sender, EventArgs e)
            {
    
            }

    Und dann wenn die Anmeldung erfolgreich war, wird über Anmeldungsseite die Anwendung mit den erforderlichen Daten gestartet:

    MainPage mynewPage = new MainPage();
    bord = mynewPage;
    this.Content = mynewPage;

    Und dann hat der Anwender im Hauptfenster über einem Button die Möglichkeit sich abzumelden.

    Ich habe bis jetzt so gemacht, dass ich die Anwendung geschlossen und neugestartet habe:

    AutomationFactory.CreateObject("WScript.Shell").Run(@"C:\PlanOrdner\Plananwendung.lnk");
    Application.Current.MainWindow.Close();
    Es ist auch vielleicht zu erwähnen, dass die Anwendung als OOB-Anwendung läuft.


    Gruesse, NUNUI

    Mittwoch, 10. Februar 2016 12:30
  • Hi,
    da musst Du der Seite "Anmelden" eine Startseite vorschalten, in der erst mit einem Button_Klick die Seiten "Anmelden" aufgerufen wird. Mit dem Abmelden fällst Du auf die Startseite zurück und der Anwender kann wieder "Anmelden" aufrufen.

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Mittwoch, 10. Februar 2016 13:31
  • Das heisst, ich lasse über Klasse App die Startseite starten:

            public App()
            {
                this.Startup += this.Application_Startup;
                
                InitializeComponent();
            }
    
            private void Application_Startup(object sender, StartupEventArgs e)
            {
                this.RootVisual = new Startseite();
            }

    Und dann wenn man auf dem Button Anmelden in der Startseite klickt, soll die Seite Anmelden aufgerufen werden?

            private void button1_Click(object sender, RoutedEventArgs e)
            {
    
                Application.Current.RootVisual = new Anmelden();
                
            }
    Aber irgendwie klappt es so nicht! Oder habe ich was falsch verstanden?


    Gruesse, NUNUI


    • Bearbeitet Nunui Mittwoch, 10. Februar 2016 13:59
    Mittwoch, 10. Februar 2016 13:58
  • Hi,
    Du hast das richtig verstanden. Was klappt denn nicht?

    --
    Viele Grüsse
    Peter Fleischer (MVP, Partner)
    Meine Homepage mit Tipps und Tricks
    Kommas richtig setzen!
    Schüler sagen, Lehrer haben es gut.
    Schüler, sagen Lehrer, haben es gut

    Mittwoch, 10. Februar 2016 14:01
  • die Seite Startseite bleibt weiter geöffnet! Muss ich vielleicht vorher RootVisual beenden und dann new Anmelden() zuweisen?

    Gruesse, NUNUI

    Mittwoch, 10. Februar 2016 14:13
  • Jetzt funktioniert es :o)

    Statt new Startseite() habe ich dem RootVisual einen Grid zugewiesen und dann bevor ich die neue Klasse dem RootVisual zuordne lösche ich den Grid und es sieht wie folgt aus:

    (http://www.telerik.com/blogs/changing-silverlight-application-themes-at-runtime)

            public App()
            {
                this.Startup += this.Application_Startup;
                
                InitializeComponent();
            }
    
            private void Application_Startup(object sender, StartupEventArgs e)
            {
                this.RootVisual = new Grid();
                this.ResetRootVisual();
            }
    
            public void ResetRootVisual()
            {
                var rootVisual = Application.Current.RootVisual as Grid;
                rootVisual.Children.Clear();
                rootVisual.Children.Add(new Anmelden());
            }

    Und Dann beim Abmelden mache ich es dann wie folgt:

    var rootVisual = Application.Current.RootVisual as Grid;
    rootVisual.Children.Clear();
    rootVisual.Children.Add(new Anmelden());
                        

    Danke Peter für Deine Unterstützung !!!


    Gruesse, NUNUI

    Mittwoch, 10. Februar 2016 14:55
  • Hi Nunui,

    könntest du dann bitte die Diskussion auf "Frage" umstellen und als "beantwortet" markieren? :)

    VLG, Tobi


    Best Regards. When you see answers and helpful posts, please click Vote As Helpful, Propose As Answer, and/or Mark As Answer. This helps us build a healthy and positive community.

    Sonntag, 18. September 2016 19:59