Ich schreibe ein Server-Programm, das einige grundlegende Threading ausführt. Es muss einige UI-Steuerelemente aktualisieren und ich habe gelernt, Delegaten zu verwenden, so dass alles threadsicher ist. Zum Beispiel, hier ist mein Delegat, der mir ein Textboxsteuerelement von einem Thread aktualisieren können:Zähler auf Thread in .NET aktualisieren
Private Delegate Sub AddMessageToTXTDelegate(ByVal lst As TextBox, ByVal str1 As String)
Private Sub AddMessageToTXT(ByVal txt As TextBox, ByVal str1 As String)
Try
If Me.InvokeRequired Then
Dim addTXT As New AddMessageToTXTDelegate(AddressOf AddMessageToTXT)
Me.BeginInvoke(addTXT, New Object() {txt, str1})
Else
txt.Text = str1
End If
Catch ex As Exception
Console.WriteLine(ex.Message)
Throw (ex)
End Try
End Sub
Jetzt muss ich einen Zähler aktualisieren und ich dachte, das gleiche Muster gelten würde. Ich setzte den folgenden Delegierten zusammen:
Private Delegate Sub IncrementCounterDelegate(ByVal ctr As Integer)
Private Sub IncrementCounter(ByVal ctr As Integer)
Try
If Me.InvokeRequired Then
Dim incCtr As New IncrementCounterDelegate(AddressOf IncrementCounter)
Me.BeginInvoke(incCtr, New Object() {ctr})
Else
ctr += 1
End If
Catch ex As Exception
Console.WriteLine(ex.Message)
Throw (ex)
End Try
End Sub
Das Problem ist, dass mein Zähler nicht inkrementiert wird. Wenn ich dies mit Debug verfolgen, wird die Anweisung "ctr + = 1" ausgeführt, aber der tatsächliche Zähler bleibt auf Null. Ich denke, ich sollte den Zähler als Referenz weitergeben.
Kann jemand hier einen Rat geben? Vielen Dank!
\ CBF