Anwendung beendet sich nicht vollständig

phi_2k

Erfahrenes Mitglied
Hallo Community!

Ich habe in meiner Applikation einen "Switch" zwischen Sprachen implementiert und zwar folgendermaßen:

Code:
//switch the current language locale
        private void SwitchLocale(String locale)
        {
            Point currentWindowPos = this.Location;
            Size currentWindowSize = this.Size;

            Thread.CurrentThread.CurrentUICulture = new CultureInfo(locale);

            this.Controls.Clear();
            this.Events.Dispose();

            InitializeComponent();

            this.Location = currentWindowPos;
            this.Size = currentWindowSize;
        }

und der Aufruf passiert über diverse Menü-Items:

Code:
        private void deutschToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SwitchLocale("de");
        }

        private void englischToolStripMenuItem_Click(object sender, EventArgs e)
        {
            SwitchLocale("en");
        }

Das ganze funktioniert auch wunderbar und die Forms werden aktualisiert, nur dass sich, sobald ich die Sprache einmal gewechselt habe die Applikation nicht schliesst wenn ich im Menü das entsprechende Element wähle:

Code:
        private void beendenToolStripMenuItem_Click(object sender, EventArgs e)
        {
if(MessageBox.Show(Properties.Resources.DLG_APPLICATION_EXIT_MSG,Properties.Resources.DLG_APPLICATION_EXIT_TITLE,MessageBoxButtons.YesNo,MessageBoxIcon.Stop) == DialogResult.Yes)
                Close();
        }

Solange man das Programm aber startet, ausführt und die Sprache nicht wechselt, beendet sich das Programm ganz normal - nur sobald eben die Sprache einmal gewechselt wurde (mittles der Methode SwitchLocale) läuft nach dem Klicken auf das Menüelement der Prozess Form1.vshost.exe weiter. Das ist eben nicht der Fall wenn die Sprache nicht gewechselt wurde.

Wer von euch kann mir sagen warum dieses Verhalten eintritt? :rolleyes:
 
Hi

Mit der Methode Close schließt du nur die aktuelle Form. Du solltest also Application.Exit() aufrufen um die Anwendung zu beenden.
Da du InitializeComponent aufrufst, wird alles neu instanziert. wie es scheint, bleiben da halt Leichen im Speicher liegen, die nicht weggeräumt werden können.

zu deiner Lösung bezgl. Localization:
Dafür gibt es schönere Methode, bei der du auch nciht extra InitializeComponent aufrufen musst und vorher alles wegwirfst.
Schau dir dafür mal die Klasse ComponentResourceManager an. Die ist geanu dafür da. Diese Klasse wird auch in InitiallizeComponent genutzt, falls du ein Beispiel brauchst.
 
Gut dass ich daran nicht gedacht habe :suspekt: natürlich Application.Exit()...

Zu dem ComponentResourceManager; ist es damit auch möglich zur Laufzeit die Sprache zu wechseln, und werden diese dann automatisch in allen Formularen aktualisiert?
 

Neue Beiträge

Zurück