Hi,
ich hab gemerkt, dass ich heftige Defizite in den Grundlagen hab, da ich nur aus dem Openbook für VB 2010 gelernt hab. In der 2008er Edition steht viel mehr drin seh ich grad und so bin ich bei den Delegaten.
Ich bin gerade dabei die Delegaten zu verstehen:
Ich verwende immer einen Delegaten, wenn ich aus einem Thread heraus eine Control ändern will, da der Delegat im Hauptthread auf die Funktion zum ändern zeigt, richtig?
Bei den Invokes bin ich mir aber auch nicht wirklich sicher, wann muss ich jetzt Me.Invoke benutzen und wann (bspw) Label1.Invoke?
Und noch eine Frage zu den Threads, wie kann ich ein Object-Array bei "thread1.Start" übergeben? Mir wird dann immer ein Fehler beim AddressOf countup angezeigt.
Mal ein Test Programm:
Gibts an diesem Code noch was zu vereinfachen oder verbessern? Oder kann ich mir den als Muster aufbewahren?
Danke schonmal!
ich hab gemerkt, dass ich heftige Defizite in den Grundlagen hab, da ich nur aus dem Openbook für VB 2010 gelernt hab. In der 2008er Edition steht viel mehr drin seh ich grad und so bin ich bei den Delegaten.
Ich bin gerade dabei die Delegaten zu verstehen:
Ich verwende immer einen Delegaten, wenn ich aus einem Thread heraus eine Control ändern will, da der Delegat im Hauptthread auf die Funktion zum ändern zeigt, richtig?
Bei den Invokes bin ich mir aber auch nicht wirklich sicher, wann muss ich jetzt Me.Invoke benutzen und wann (bspw) Label1.Invoke?
Und noch eine Frage zu den Threads, wie kann ich ein Object-Array bei "thread1.Start" übergeben? Mir wird dann immer ein Fehler beim AddressOf countup angezeigt.
Mal ein Test Programm:
VB.NET-Quellcode
- Imports System.Threading
- Public Class Form1
- Private Delegate Sub SetTextCallback(ByVal text As String)
- Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
- Static thread1 As Thread
- If Not IsNothing(thread1) AndAlso thread1.IsAlive Then
- MsgBox("Thread läuft noch!")
- Else
- thread1 = New Thread(AddressOf countup)
- thread1.Start(20)
- End If
- End Sub
- Sub countup(ByVal Parameter As Object)
- Dim x As Integer = CInt(Parameter)
- For i As Integer = 0 To x
- Me.Invoke(New SetTextCallback(AddressOf SetText), CStr(i))
- Threading.Thread.Sleep(200)
- Next
- Me.Invoke(New SetTextCallback(AddressOf SetText), "Fertig")
- End Sub
- Private Sub SetText(ByVal text As String)
- Label1.Text = text
- Label1.Refresh()
- End Sub
- End Class
Gibts an diesem Code noch was zu vereinfachen oder verbessern? Oder kann ich mir den als Muster aufbewahren?
Danke schonmal!