System.InvalidOperationException bei asynchronem Thread

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

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

    System.InvalidOperationException bei asynchronem Thread

    Moin,
    ich habe ein Programm geschrieben, welches eine Spielprozedur asynchron ausführt. Jetzt hatte ich gerade Folgendes gemacht. Ich habe
    auf „Neue Runde“ geklickt, in dem Moment fiel mir ein „Oh, ich wollte ja beenden“, klicke in der GUI auf schließen, und dann kam der Crash:
    System.InvalidOperationException: "Invoke oder BeginInvoke kann für ein Steuerelement erst aufgerufen werden, wenn das Fensterhandle erstellt wurde."

    Logisch, der asynchrone Thread war noch nicht abgeschlossen, aber die Labels waren schon
    nicht mehr existent, weil aufgeräumt wurde.

    Wie kann ich den asynchronen Thread sofort abbrechen, wenn schließen
    geklickt wird? Ich habe an Thread.Kill() gedacht, jedoch weiß ich nicht, wie ich herausfinde, welche Nummer er hat.
    Du startest im Hauptprogramm den Thread ja mittels:

    VB.NET-Quellcode

    1. ​Dim neuerThread As Thread = new Thread(...)



    Dann fügst du eine Liste ein, die shared ist und der du den neuen Thread als Member übergibst.
    Dann kannst du bei der Prozedur beim Schließen ja schauen, ob in der Collection ein Thread enthalten ist und den dann darüber beenden.

    VB.NET-Quellcode

    1. ​Dim ThreadColl as Collection(Of Thread) = New Collection(Of Thread)
    2. ThreadColl.Add(neuerThread)
    3. 'Beim Schließen:
    4. If(ThreadColl.Count > 0) Then
    5. Foreach (Thread t in ThreadColl)
    6. ' Hier den Task beenden
    7. Next t
    8. End If


    Ich meine aber, dass Thread.Kill nicht der beste Weg ist