Tipp 0204 Vom Nebenthread auf Steuerelemente zugreifen
Autor/Einsender:
Datum:
  Thomas Becker
12.09.2010
Entwicklungsumgebung:   VB.Net 2005
Framework:   2.0
Um von einem Nebenthread heraus auf Steuerelemente zugreifen zu können, bedarf es Delegat und Invoke. Oft kann es sinnvoller sein, lieber eine Methode aus dem Nebenthread heraus so aufzurufen, dass diese vom Hauptthread selbst abgearbeitet wird und dort die Berechnungen an die Steuerelemente übergeben werden.
Der Nutzen: anstelle etliche Steuerelemente zu invoken, sperren oder sonstiges, switcht man einfach durch SynchronizationContext mit den Daten im Gepäck zu einer Methode im Haupthread. Diese kann dadurch delegatlos abgearbeitet werden.
 
Imports System.Threading

Public Class Form1
  Dim HauptthreadContext As SynchronizationContext

  Private Sub Button1_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button1.Click
    ' Kontext des Hauptthreads festhalten
    HauptthreadContext = SynchronizationContext.Current

    ' Nebenthread startet die Methode TMachtWas
    Dim T As New Thread(AddressOf TMachtWas)
        T.Start()
  End Sub

  Private Sub TMachtWas()
    ' Nebenthread läuft:
    ' Irgendwas ins Array berechnen
    Dim MyArr(19) As String

    For i As Integer = 0 To 19
      MyArr(i) = Rnd.ToString("#0.00000000")
    Next

    ' Methode ImHauptThread wird vom Hauptthread aufgerufen
    ' Array wird hier übergeben, ansonsten einfach Nothing
     HauptthreadContext.Post(New SendOrPostCallback(AddressOf _
       ImHauptThread), MyArr)
  End Sub

  Private Sub ImHauptThread(ByVal state As Object)
    ' Durch Hauptthread füllt sich die ListBox,
    ' daher ist kein Delegat & Invoke nötig
    ListBox1.Items.Clear()
    Dim myarr() As String = DirectCast(state, String())
    ListBox1.Items.AddRange(myarr)
  End Sub

  Private Sub Button2_Click(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles Button2.Click
    Me.Close()
  End Sub

End Class
 
Weitere Links zum Thema
Formübergreifender Zugriff auf Steuerelemente

Windows-Version
98/SE
ME
NT
2000
XP
Vista
Win 7


Download  (13 kB) Downloads bisher: [ 153 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Tipps | Projekte | Tutorials | Bücherecke | VB-/VBA-Tipps | API-Referenz | Komponenten | VB.Net-Forum | VB/VBA-Forum | DirectX-Forum | Foren-Archiv | DirectX | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 18. Dezember 2011