System.InvalidOperationException aufgrund einer Sammlungsänderung beim Aufruf von Application.Exit ()

8

Ich habe diesen wirklich, wirklich seltsamen Fehler, den ich nie feststellen konnte (es passiert sehr selten). Im Grunde habe ich eine C # -Anwendung, die beim Beenden zufällig eine unbekannte Ausnahme ausgelöst hat. Ich habe es diesmal im Debugger gefunden, und es stellt sich heraus, dass der Aufruf von Application.Exit() einen System.InvalidOperationException mit der folgenden Meldung wirft:

  

Eine erste Möglichkeit des Typs 'System.InvalidOperationException' ist in mscorlib.dll aufgetreten

     

Zusätzliche Informationen: Sammlung wurde geändert; Aufzählungsoperation kann nicht ausgeführt werden.

Ich bin nicht sicher, was diese Sammlung, die angeblich geändert wurde, ist, oder wer es war, die es geändert hat.

Der Stack-Trace ist nicht sehr hilfreich:

  

mscorlib.dll! System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext ()   + 0x13f bytes System.Windows.Forms.dll! System.Windows.Forms.Application.ExitInternal ()   + 0x112 bytes System.Windows.Forms.dll! System.Windows.Forms.Application.Exit (System.ComponentModel.CancelEventArgs   e) + 0x65 Bytes

Irgendeine Idee, wie ich herausfinden kann, welche ArrayList geändert wurde? Ich denke nicht, dass es etwas ist, was ich explizit mache, wahrscheinlicher ist eine Aktion, die ich mache, die den zugrunde liegenden Zustand des .NET-Frameworks während einer Operation ändert, die MS nicht erwartet hat.

    
Mahmoud Al-Qudsi 27.10.2011, 05:33
quelle

2 Antworten

17

Ungewöhnlich, noch nie zuvor gesehen. Die Application.ExitInternal () -Methode iteriert die Application.OpenForms-Auflistung. Offensichtlich wird diese Sammlung währenddessen verändert. Dafür gibt es nur wenige mögliche Ursachen, ich kann nur einen finden. Eines Ihrer Formulare hat die OnFormClosing () -Methode überschrieben oder das FormClosing-Ereignis abonniert. Und macht etwas, das die OpenForms-Sammlung ändert. Konnte das Formularobjekt entsorgen oder eine neue Formularinstanz erstellen oder eine Formulareigenschaft ändern, die dazu führt, dass das Fenster wie ShowInTaskbar neu erstellt wird.

Sie werden diesen Code nicht in der Aufrufliste finden. Überprüfen Sie Ihren On / FormClosing-Code. Kommentarcode, wenn Sie es nicht schnell finden können.

    
Hans Passant 27.10.2011, 09:57
quelle
0

Wir haben gerade auch Tage mit diesem Problem verbracht ... wo wir die Ausnahme 'System.InvalidOperationException' und die App (in diesem Fall eine Twain-Bibliothek von DynamSoft) erhalten haben. Anscheinend hätten wir CLOSE () nicht aufrufen sollen, nachdem wir application.exit aufgerufen haben. Das Schließen der Ausnahme machte die Ausnahme ungültig und führte dazu, dass die App normal beendet wurde. Visuell würde die App ein seltsames Nachrichtenfeld von Microsoft anzeigen, das sagt: "Möchten Sie weitere Informationen zu diesem Problem einreichen?" - WAS PROBLEM? Es hat vorher nichts angezeigt, also gingen wir durch die Stack-Spuren.

%Vor%     
john santora 04.03.2015 01:19
quelle