.net NET中线程上的更新计数器
我正在编写一个服务器程序,它执行一些基本的线程处理。它需要更新一些UI控件,我还学习了如何使用委托,以确保一切都是线程安全的。例如,我的委托允许我从线程更新TextBox控件:.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)
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
增加一个私有字段-无需委托或调用