Frage

Ich versuche, herauszufinden, welche ich verwenden soll. mein WinForm app Feuers eines Formulars im Dialogmodus beim Schließen. Diese Form führt einen Hintergrundarbeiter, die die DB mit der Remote-DB Synchronisiert und zeigt es Fortschritte bei dem „Splash-Formular.“

Ich habe eine Methode wie folgt:

private void CloseMyApp()
{
    SaveUserSettings();

    splashForm = new SplashForm();
    splashForm.ShowDialog();

    Application.ExitThread();
    //Application.Exit();
}

das ist, was ich nenne meine app von Menü schließen -> Beenden und in dem Form_FormClosing() Ereignisse. Application.Exit() gibt die folgende Fehlermeldung ->

  

Die Auflistung wurde geändert; Aufzählung kann möglicherweise nicht ausgeführt.

Nun habe ich gelesen, dass Environment.Exit() brutal ist und bedeutet, dass es wahrscheinlich etwas mit Ihrer App falsch ist (siehe hier ).

Application.ExitThread() funktioniert, aber ich bin concered, dass es nur arbeiten kann sehen sein und wie ich es noch nie benutzt haben, bevor ich bin nicht sicher, wenn es in der Regel angemessen ist, dies zu tun.

War es hilfreich?

Lösung

Leider wird das Problem durch eine dieser nicht verursacht, und wirklich existiert (auch wenn Sie die Nachricht nicht bekommen) in all diesen Szenarien.

Ihr Problem ist folgende:

  

Beim Schließen meines WinForm App Feuers eines Formulars im Dialogmodus. Diese Form führt einen Hintergrundarbeiter, die die DB mit der Remote-DB Synchronisiert und zeigt es Fortschritte bei dem „Splash-Formular.“

Da Sie nicht tatsächlich heruntergefahren, wenn Sie eine Abschaltung anfordern, die alle die „Exit“ Funktionen versuchen, Ihren Hintergrund-Thread abzureißen. Leider ist dies wahrscheinlich in der Mitte des DB-Sync passiert, und eine Aufzählung in der Logik speichern arbeitet wahrscheinlich, dass Fehler bereitstellt.

würde ich empfehlen, nicht eines dieser mit - nur statt myMainForm.Close() nennen. Das sollte Ihr Hauptformular schließen, die in geeigneter Weise Ihre Schließung Logik ausgelöst. Sobald das Hauptformular in Ihrer Anwendung geschlossen wird, wird es ordnungsgemäß heruntergefahren.

Andere Tipps

Environment.Exit() ist für Konsolenanwendungen verwendet wird.

Sie verwenden möchten: System.Windows.Forms.Application.Exit()

Mit dem Faden Verlassen Sie Verlassen nur den aktuellen Thread-Kontext, während rückstandslos Vordergrund Themen laufen. Ich vermute, dass der Thread, der Fehler immer noch verursacht ausgeführt wird, so haben Sie das Problem im Wesentlichen maskieren, nicht um es funktioniert. Ich würde versuchen, herauszufinden, warum dieser Fehler "Collection was modified; enumeration operation may not execute." beim Beenden bekommen. Es wird von Application.Exit() ausgesetzt zu sein, aber es ist nicht durch sie verursacht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top