Form im Backgroundworker manipulieren?

  • VB.NET
  • .NET (FX) 4.0

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Form im Backgroundworker manipulieren?

    Hey,
    ich möchte gerne Controls auf meiner Form verändern und während der Laufzeit hinzufügen.
    Ich habe nun eine Private Sub, welches die neuen Controls zeichnet und ein Label anpasst.
    Der Backgroundworker ruft diese Sub auf. Es sollen also Daten im Hintergrund geladen werden.

    Wie ist es möglich, aus einem anderen Thread im "Hauptthread" etwas zu ändern?

    Gegooglet habe ich, und einen Codeschnipsel gefunden, wo nicht gleich drunter steht: "Das solltest du so nicht machen!". Könnte mir den jemand ggf. erklären?

    VB.NET-Quellcode

    1. Private Sub setLabelTxt(ByVal text As String, ByVal lbl As Label)
    2. If lbl.InvokeRequired Then
    3. lbl.Invoke(New setLabelTxtInvoker(AddressOf setLabelTxt), text, lbl)
    4. Else
    5. lbl.Text = text
    6. End If
    7. End Sub
    8. Private Delegate Sub setLabelTxtInvoker(ByVal text As String, ByVal lbl As Label)


    Lg,
    Sonderzeichen :)

    #edit:
    Hab gerade einen MSDN Link gefunden, der mir geholfen hat:
    msdn.microsoft.com/de-de/libra…cs-lang=vb#code-snippet-1
    ...aber gut, dass wir darüber gesprochen haben!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sonderzeichen“ ()

    Sonderzeichen schrieb:

    Könnte mir den jemand ggf. erklären?
    Der Code aktualisiert - auf überaus umständliche und unperformante Weise - den Text eines Labels, aus einem Nebenthread heraus.
    Soll man so nicht machen.

    Erklärt genug?

    Btw: Wozu soll man dir das erklären? Du willst doch nicht den Text eines Labels aktualisieren?

    Btw, die zweite: Zur Laufzeit soll man keine Controls hinzufügen, schon gar nicht aus einem Nebenthread.