Backgroundworker Exception bei Zugriff auf Controls

  • VB.NET
  • .NET 4.5

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Backgroundworker Exception bei Zugriff auf Controls

    Hallo, wieder mal ein Problem. Ich habe 2 Backgroundworker auf meiner Form.
    In beiden "ProgressChanged" - Events starte ich das selbe Sub.
    Mit dem einen Backgroundworker geht das, mit dem anderen wirft er mir ne Invalid Operation Exception aus? Was mache ich falsch?

    Hier mal ein bisschen Code.

    VB.NET-Quellcode

    1. Private Sub BackgroundworkerHuman_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorkerHuman.ProgressChanged
    2. PunktZuteilen()
    3. End Sub
    4. Private Sub BackgroundworkerKI_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorkerKI.ProgressChanged
    5. PunktZuteilen()
    6. End Sub
    7. Private Sub PunktZuteilen()
    8. Select Case AktuellesSpiel.AktuellerSpieler
    9. Case 0, 2
    10. Label_PunkteSpieler2.Text = Label_PunkteSpieler2.Text.Replace("Punkte: ", "")
    11. Label_PunkteSpieler2.Text = "Punkte: " & CInt(Label_PunkteSpieler2.Text) + 1
    12. Case 1
    13. Label_PunkteSpieler1.Text = Label_PunkteSpieler1.Text.Replace("Punkte: ", "")
    14. Label_PunkteSpieler1.Text = "Punkte: " & CInt(Label_PunkteSpieler1.Text) + 1
    15. Case 3
    16. Label_PunkteSpieler3.Text = Label_PunkteSpieler3.Text.Replace("Punkte: ", "")
    17. Label_PunkteSpieler3.Text = "Punkte: " & CInt(Label_PunkteSpieler3.Text) + 1
    18. Case 4
    19. Label_PunkteSpieler4.Text = Label_PunkteSpieler4.Text.Replace("Punkte: ", "")
    20. Label_PunkteSpieler4.Text = "Punkte: " & CInt(Label_PunkteSpieler4.Text) + 1
    21. End Select
    22. End Sub


    Hab schon viel rumgedoktert, aber es ändert nix.

    Humax schrieb:

    ne Invalid Operation Exception
    Ziehmlich präzise Beschreibung.
    Subs werden nicht gestartet sondern aufgerufen.
    Probierma, in die Sub PunktZuteilen() ein SyncLock einzubauen:
    docs.microsoft.com/de-de/dotne…ements/synclock-statement
    Und:
    Punktestände in Labels zu merken ist ein NoGo, trenne Daten und GUI.
    Und 2:
    Option Strict On :!:
    Visual Studio - Empfohlene Einstellungen
    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!
    Option Strict ist on.
    Mit den Punkteständen ist klar. War mir aber für das kleine Programm nicht die Mühe Wert.
    Wegen dem Synclock werde ich mal reingucken, aber es geht ja jetzt, das Problem war das der zweite Backgroundworker in einem Sub aufgerufen wurde, welches ursprünglich vom ersten Backgroundworker aufgerufen war. Deshalb die Exception.

    Humax schrieb:

    Option Strict ist on.
    OK, da macht der Compiler hier eine automatische String-Konvertierung wegen dem &:

    VB.NET-Quellcode

    1. Label_PunkteSpieler2.Text = "Punkte: " & CInt(Label_PunkteSpieler2.Text) + 1

    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!