Eventhandling und Invoke



  • Hallo zusammen,

    die Frage mag euch sehr banal vorkommen, aber ich kenne das aus der C++ Zeit anders (Messages usw.).
    Ich habe einen Thread, der auf ein externes Signal wartet (Eingabegerät) und dann in einer Form ein Event aufruft (bzw. den Handler). Dem werden die Daten einfach übergeben. Wie es scheint, darf ich die Daten aber nicht so einfach benutzen.

    Mein Code des Handlers:

    private void GoodReadEvent(ScanThread sender, string Scantext)
    {
        textBoxMitarbeiter.Text = Scantext;
    }
    

    Das wirft allerdings eine Exception. Warum das? Er hat doch den String und brauch in doch nur in den "Text" Member der Textbox schreiben, oder?

    Das hingegen funktioniert, scheint mir aber sehr umständlich.

    private void GoodReadEvent(ScanThread sender, string Scantext)
    {
        this.Invoke(new EventHandler(delegate
        {
            textBoxMitarbeiter.Text = Scantext;
        }));
    }
    

    Wenn es nicht anders geht, kann ich damit leben, aber dann hätte ich es wenigstens gern erklärt.

    Könnt ihr da helfen?

    VG
    Ranger



  • Hab es gefunden.
    Es ist nicht ertlaubt in einem UI Thread direkt einzugreifen, darum muss über invoke quasi die Operation in die Queue gestellt werden.

    Wenn ich da fgalsch liege korrigiert mich bitte.

    VG
    Ranger





  • Ja wenn es sich um verschiedene Threads handelt ist das Problem einfach, dass diese nicht untereinander Daten verändern dürfen. Es gibt noch die Eigenschaft "InvokeRequired" die du in dem Zusammenhang abprüfen kannst, bevor du dich entscheidest zu "invoken"


Log in to reply