|
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
| |
|
|
|
Windows-Version |
98/SE |
|
|
ME |
|
|
NT |
|
|
2000 |
|
|
XP |
|
|
Vista |
|
|
Win
7 |
|
|
|
|
Download (13
kB)
|
Downloads bisher: [ 153 ]
|
|
|