.net NET中线程上的更新计数器

.net NET中线程上的更新计数器,.net,multithreading,.net,Multithreading,我正在编写一个服务器程序,它执行一些基本的线程处理。它需要更新一些UI控件,我还学习了如何使用委托,以确保一切都是线程安全的。例如,我的委托允许我从线程更新TextBox控件: Private Delegate Sub AddMessageToTXTDelegate(ByVal lst As TextBox, ByVal str1 As String) Private Sub AddMessageToTXT(ByVal txt As TextBox, ByVal str1 As String)

我正在编写一个服务器程序,它执行一些基本的线程处理。它需要更新一些UI控件,我还学习了如何使用委托,以确保一切都是线程安全的。例如,我的委托允许我从线程更新TextBox控件:

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
现在我需要更新一个计数器,我想同样的模式也适用。我召集了以下代表:

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
问题是我的计数器没有递增。当我用debug跟踪它时,执行“ctr+=1”语句,但实际计数器保持为零。我想我应该通过推荐的方式把柜台交进去

这里有人能提供一些建议吗?谢谢


\cbf

一种线程安全的增加整数的方法可以通过使用。您应该使用此选项并避免委托

编辑 我不知道你为什么要用代理。您可以在任何线程上递增值对象。您无法从其他线程更新UI控件


如果您试图使此线程安全,则需要使用监视器(例如)或Interlocked的增量方法引入锁定。

您通过值传递计数器,因此
ctr+=1
增加函数的参数。您需要通过引用传递计数器,或者只需使用
InterlockedIncrement
增加一个私有字段-无需委托或调用