2017-11-14 2 views
1

Ich sehe, es gibt bereits viele Fragen zu diesem Fehler. Ich habe sie alle durchgelesen und so ziemlich jedes einzelne ist, weil sie eine Sammlung verändern, während sie darüber aufzählen, was ziemlich offensichtlich ist. Mein Fall ist jedoch anders.Sammlung wurde geändert; Enumerationsoperation kann nicht ausgeführt werden # 10897

Also hier ist die Ausnahme in Frage. Beachten Sie die letzte Zeile, die ich geändert habe.

Source mscorlib 
Method MoveNext 
Message Collection was modified; enumeration operation may not execute. 
Exception System.InvalidOperationException 
Stack 
    at System.Collections.ArrayList.ArrayListEnumeratorSimple.MoveNext() 
    at System.Windows.Forms.Application.ExitInternal() 
    at System.Windows.Forms.Application.ThreadContext.OnThreadException(Exception t) 
    at System.Windows.Forms.Control.WndProcException(Exception e) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnThreadException(Exception e) 
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.RunDialog(Form form) 
    at System.Windows.Forms.Form.ShowDialog(IWin32Window owner) 
    at System.Windows.Forms.Form.ShowDialog() 
    at RandomEventWithinMyApp() 

Ich habe persönlich nie den Fehler oder in der Lage gesehen, es zu reproduzieren. Ich habe diesen Fehlerbericht nur von Zeit zu Zeit von Benutzern gesehen und es ist mir immer entgangen.

Wie Sie sehen können, tritt der Fehler innerhalb des System.Windows.Forms.Form.ShowDialogs auf, sodass beim Versuch, ein Formular zu öffnen, ein Fehler auftritt. Offensichtlich habe ich keine Funktion namens RandomEventWithinMyApp, stattdessen tritt der Fehler buchstäblich zufällig in einem Steuerelementereignis auf, normalerweise ein Knopfklick zum Beispiel, da normalerweise das Öffnen eines Formulars durch den Benutzer ausgelöst wird.

Nun, wenn der Fehler konsistent passiert, wenn der Benutzer auf die gleiche Schaltfläche klickt, um das gleiche bestimmte Formular zu öffnen, dann wäre es viel einfacher zu erarbeiten. Das Problem besteht darin, dass das Ereignis, das den Fehler auslöst, zufällig ist. Dies kann ein beliebiges Ereignis (z. B. ein Klick auf eine Schaltfläche) sein, durch das ein Formular in der App geöffnet wird. Das Formular, das geöffnet wird, wenn der Fehler auftritt, ist ebenfalls zufällig. Ich habe also nichts zu tun.

Es fühlt sich fast so an, als ob etwas anderes schief läuft in dem .Net Formular Ladecode, den ich nicht sehen kann. Vielleicht etwas, das die Sammlung von offenen Formen oder etwas verwaltet ... keine Ahnung, nur wilde Vermutungen an dieser Stelle. Hat jemand irgendwelche Ideen, wo ich anfangen sollte zu untersuchen?

Antwort

0

Ich würde alle Formular schließen Ereignisse oder sogar geschlossenen Ereignisse zu überprüfen. Sie können die .Net-Quelle unter MSDN durchsuchen und sehen, dass die in Application.ExitIntenal über eine Arraylist von Formularen iteriert, um FormClosing-Ereignisse auszulösen. Es kann etwas in Ihrem Formular passieren, das Ereignisse schließt, die diese Arraylist, die iteriert wird, ändern.

   // Raise the FormClosing and FormClosed events for each open form 
       if (forms != null) { 
        foreach (Form f in OpenFormsInternal) { 
         if (f.RaiseFormClosingOnAppExit()) { 
          cancelExit = true; 
          break; // quit the loop as soon as one form refuses to close 
         } 
        } 
       } 
+0

Das ist ein interessanter Punkt, aber ich frage mich, warum Application.ExitInternal überhaupt aufgerufen wird? Im konkreten Fall dieses Fehlers hatte der Benutzer auf eine Schaltfläche in der App geklickt, die daraufhin ein Formular öffnet. Sie haben die Anwendung nicht verlassen? Wenn man über den Call-Stack schaut, scheint es fast so, als ob etwas beim Öffnen des Formulars schief gelaufen ist, was eine Ausnahme ausgelöst hat, die dann die Anwendung verlassen hat. – user1227445

Verwandte Themen