Mir selbst, unbekannter Fehler "System.InvalidOperationException"

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Mir selbst, unbekannter Fehler "System.InvalidOperationException"

    Hallo Leute,
    ich bin jetzt echt verwundert weil mein Code nicht funktioniert und ich nicht weiß, wo der Fehler liegt.

    Fehlerbeschreibung
    System.InvalidOperationException wurde nicht behandelt.
    HResult=-2146233079
    Message=Die Liste, an die der Enumerator gebunden ist, wurde geändert. Ein Enumerator kann nur verwendet werden, wenn die Liste nicht geändert wird.
    Source=System.Windows.Forms
    StackTrace:
    bei System.Windows.Forms.ListBox.ItemArray.EntryEnumerator.System.Collections.IEnumerator.MoveNext()
    bei Skype_Bot_89_Helfer.Form1.Button2_Click(Object sender, EventArgs e) in D:\ClickProg\Skype Bot 89 Helfer\Skype Bot 89 Helfer\Form1.vb:Zeile 25.
    bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    bei System.Windows.Forms.Control.WndProc(Message& m)
    bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
    bei System.Windows.Forms.Button.WndProc(Message& m)
    bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
    bei System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
    bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
    bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun()
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel()
    bei Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
    bei Skype_Bot_89_Helfer.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:Zeile 81.
    bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
    bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
    bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
    bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
    bei System.Threading.ThreadHelper.ThreadStart()
    InnerException:


    Quellcode

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim FertigText As String
    3. Dim Erstes As Integer = 0
    4. Const quote As String = """"
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. ListBox1.Items.Add(TextBox1.Text)
    7. TextBox1.Clear()
    8. End Sub
    9. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    10. If CheckBox1.Checked = True Then
    11. FertigText = ""
    12. For Each Items In ListBox1.Items
    13. If Erstes = 1 Then
    14. FertigText = FertigText & (" or " & quote & Items.ToString & quote)
    15. ListBox1.Items.Remove(Items.ToString)
    16. Else
    17. FertigText = ("If msg.body.tolower = (""" & Items.ToString & """")
    18. ListBox1.Items.Remove(Items.ToString)
    19. Erstes = 1
    20. End If
    21. Next
    22. FertigText = FertigText & ")"
    23. MsgBox(FertigText)
    24. End If
    25. End Sub
    26. End Class


    Ist bestimmt ganz easy aber ich blicks gerade einfach nicht. Hoffe ihr könnt mir helfen! :thumbsup:
    Kurzer EDIT: VB-Tag eingefügt :D
    Ich mein ja auch das entfernen der Items generell.
    Ein Enumerator kann nur verwendet werden, wenn die Liste nicht geändert wird.
    Just for Info, vielleicht hilft es ja mal irgendjemanden weiter:
    Hatte heute den Fehler auch, weil eine Datei nicht gefunden worden konnte bei Versuch diese zu öffnen.
    Nachdem ich den Pfad bereinigt habe klappte es ohne Probleme. Mein Tipp am Rande: Immer ein Try, Catch ex as Exception einsetzen

    v-go schrieb:

    Mein Tipp am Rande: Immer ein Try, Catch ex as Exception einsetzen
    Mein Tipp am Rande: Immer ein Try, Catch ex As System.InvalidOperationException oder genau die abzufangende, nicht aber pauschal die Basis-Exception einsetzen. 8-)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    ja, und was soll dann passieren, wenn eine Datei nicht gefunden wird, oder nicht zu öffnen ist?
    Das Programm kann so nicht weiter laufen.
    Mein Tipp am Rande:
    Erst ausprogrammieren, wie das Programm im Fehlerfall dann doch weiter laufen kann.
    Vorher keinesfalls irgendeinen TryCatch hinschreiben!!
    Manchmal ist das sehr einfach, etwa beim Daten sammeln kann man u.U. fehler-auslösende Daten einfach übergehen.
    Bei den meisten Fehlern ist's aber fast oder ganz unmöglich, dass ein Proggi weiter laufen kann. Und dann sollte man auch keinen Trycatch hinschreiben.

    Also folgende Strategie:
    1. Kein TryCatch
    2. Ausprogrammieren, wie ein Prog trotz Fehler weiter laufen kann
    3. spezifischen TryCatch (was Rod sagt), der genau die Exception ausfiltert, für die in 2) die Alternative ausprogrammiert ist

    TryCatch ist ein heißes Eisen