Vb.net 更新哈希表中的整数值
我有一个计时器每秒钟运行一次,我计划在计时器的每一个滴答声内进行检查 我有一个哈希表,它有两个整数,我试图设置为时间的值。 每次计时器滴答作响时,它都会将以前的值加1 我已经尝试在我的Vb.net 更新哈希表中的整数值,vb.net,foreach,hashtable,Vb.net,Foreach,Hashtable,我有一个计时器每秒钟运行一次,我计划在计时器的每一个滴答声内进行检查 我有一个哈希表,它有两个整数,我试图设置为时间的值。 每次计时器滴答作响时,它都会将以前的值加1 我已经尝试在我的中直接修改哈希表,对于每个出现错误的语句,我还尝试创建一个新的哈希表,该哈希表存储密钥和新的时间,然后设置值。但是这会得到一个没有设置为对象实例的对象引用,这是没有意义的,因为有一个检查来确保它不是null 代码 Private Sub expiryTimer_Tick(sender As Object,
中直接修改哈希表
,对于每个出现错误的语句,我还尝试创建一个新的哈希表
,该哈希表存储密钥和新的时间,然后设置值。但是这会得到一个没有设置为对象实例的对象引用,这是没有意义的,因为有一个检查来确保它不是null
代码
Private Sub expiryTimer_Tick(sender As Object, e As EventArgs) Handles expiryTimer.Tick
Dim toRemove As List(Of Integer)
Dim toSet As Hashtable
'Loop through active table
If Active IsNot Nothing Then
For Each key In Active
If Active(key) >= 10 Then
toRemove.Add(0)
Else
toSet.Add(key, Active(key) + 1)
End If
Next
End If
'Set Values
If toSet IsNot Nothing Then
For Each value In toSet
Active(value) = toSet(value)
Next
End If
'Remove Values
If toRemove IsNot Nothing Then
For Each value In toRemove
Active.Remove(value)
Next
toRemove.Clear()
End If
End Sub
您只检查“活动”,而不检查这些本地变量
Dim toRemove As List(Of Integer)
Dim toSet As Hashtable
请使用初始化的变量重试
Dim toRemove As New List(Of Integer)
Dim toSet As New Hashtable
是的,谢谢你,似乎就是这样。我完全忘记了新的。这已经修复了我得到的错误,但是由于某种原因,当值达到10时,它没有从哈希表中删除它?你知道为什么会这样吗?因为这是在计时器中运行的,我认为这可能是线程问题。检查“ConcurrentDictionary”,这是一个线程安全字典,目前可能会有所帮助。您应该将其标记为已回答,如果您的哈希表仍然存在问题,请创建一个新的问题,该问题可能是的副本。这是一个非常常见的错误,您需要使用New
初始化对象(ListOf&Hashtable)。