Aktualisierung von Textboxen aus einem anderen Thread



  • Hallo zusammen,

    ich möchte aus dem Thread der UART Empfangsroutine verschiedene Textboxen aktualisieren, alle mit der gleichen Funktion, der Name der jeweiligen Textbox wird der Funktion als sting übergeben (so meine Idee).

    Wie bekomme ich den string "Textboxname" in den Namen der jeweiligen Textbox konvertiert, so das die Funktion unten funktioniert?

    Evtl. gibt es ja auch einen anderen eleganten Weg wie ich mit einer Funktion aus dem entfernten Thread meine verschiedenen Boxen aktualisiert bekomme...

    Danke Euch 1000mal

    public void Update_my_Textboxes(string Textboxname, string str_message)
    {
    Name_der_echten_Textbox.Invoke(new EventHandler(delegate
    {
    Name_der_echten_Textbox.Text = str_message;
    }));
    }

    Grüße Opal


  • Administrator

    Wieso übergibst du der Funktion nicht die Textbox selbst, statt nur ihren Namen? 😕

    Grüssli



  • [quote="Dravere"]Wieso übergibst du der Funktion nicht die Textbox selbst, statt nur ihren Namen? 😕

    Grüssli[/quote]

    Genau darum geht es ja, da der Aufruf in einem separaten Thread erfolgt, lässt die Sicherheitsstufe des DotNet dieses nicht zu.

    Grüße Opal




  • Administrator

    Opal19 schrieb:

    Genau darum geht es ja, da der Aufruf in einem separaten Thread erfolgt, lässt die Sicherheitsstufe des DotNet dieses nicht zu.

    Wie bitte? Wieso sollte dies verboten sein? Läuft bei mir einwandfrei. Man darf halt nur nicht einen direkten Aufruf durchführen, sondern über BeginInvoke gehen.
    Das hat aber rein gar nichts mit einer Sicherheitsstufe zu tun, sondern kommt daher, dass die eine TextBox nur vom UI-Thread verändert werden darf.

    Weitere Informationen findest du hier:
    Control.InvokeRequired
    Calling Synchronous Methods Asynchronously

    Grüssli



  • Opal19 schrieb:

    Genau darum geht es ja, da der Aufruf in einem separaten Thread erfolgt, lässt die Sicherheitsstufe des DotNet dieses nicht zu.

    Du darfst die Objekte (Textboxen, allgemein Controls) natürlich in einen anderen Thread übegeben. Nur wird der Zugriff auf andere Properties/Methoden als InvokeRequired, Invoke, BeginInvoke und CreateGraphics unterbunden. Das hat aber nichts mit einer Sicherheitsstufe zu tun, damit wird in WinForms einfach von vorneherein unterbunden, dass es zu Problemen durch mehrere Threads kommt.

    Edit: Jetzt war Dravere schneller. Ich lass' es trotzdem mal stehen 🙂


Log in to reply