Je suis en train d'écrire un programme serveur qui fait un peu de threading de base. Il a besoin de mettre à jour certains contrôles de l'interface utilisateur et j'ai appris à utiliser les délégués de manière à ce que tout soit sécurisé. Par exemple, voici mon délégué qui me permet de mettre à jour un contrôle TextBox d'un fil:Mettre à jour le compteur sur le thread dans .NET
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
Maintenant je dois mettre à jour un compteur et je me suis dit le même schéma s'appliquerait. J'ai mis en place le délégué suivant:
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
Le problème est que mon compteur n'est pas incrémenté. Lorsque je trace cela avec le débogage, l'instruction "ctr + = 1" est exécutée mais le compteur réel reste à zéro. Je pense que je devrais passer le compteur par référence.
Quelqu'un peut-il donner des conseils ici? Merci!
\ cbf