Mam naprawdę, bardzo dziwny błąd, którego nigdy nie udało mi się ustalić (zdarza się to bardzo rzadko). Zasadniczo, mam aplikację C#, która losowo rzuciła nieznany wyjątek przy wyjściu. Udało mi się go złapać w debuggera tym razem, a okazuje się, że dzwoni Application.Exit()
jest rzucanie System.InvalidOperationException
z następującym komunikatem:System.InvalidOperationException ze względu na modyfikację kolekcji podczas wywołania Application.Exit()
Pierwsza szansa wyjątek typu „System.InvalidOperationException” wystąpił w mscorlib. dll
Dodatkowe informacje: Kolekcja została zmodyfikowana; operacja wyliczania może nie zostać wykonana.
nie jestem pewien co to zbiór, który został rzekomo jest modyfikowana, lub kto to był, że go modyfikować.
Ślad stosu nie jest bardzo pomocne:
mscorlib.dll System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext() + 0x13f bajtów System.Windows System.Windows.Forms.dll!. Forms.Application.ExitInternal() + 0x112 bajtów System.Windows.Forms.Application.Exit System.Windows.Forms.dll! (System.ComponentModel.CancelEventArgs e) + 0x65 bajtów
Każdy pomysł jak ja może dowiedzieć się, który ArrayList został zmodyfikowany? Nie sądzę, że jest to coś, co robię jawnie, bardziej prawdopodobne działanie, które robię, modyfikowanie podstawowego stanu platformy .NET w trakcie operacji, której MS nie oczekiwał ..
To brzmi jak kolekcja formularzy. IIRC Widziałem już to wcześniej, ale nie pamiętam żadnych szczegółów, przepraszam. – leppie
Co robi aplikacja podczas zamykania systemu? Czy mógłbyś podać kod? – Fischermaen
Nic, naprawdę ... W momencie, gdy naciskałem przycisk wyjścia, aplikacja była w stanie bezczynności, bez wątków działających w tle. –