Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 更新哈希表中的整数值_Vb.net_Foreach_Hashtable - Fatal编程技术网

Vb.net 更新哈希表中的整数值

Vb.net 更新哈希表中的整数值,vb.net,foreach,hashtable,Vb.net,Foreach,Hashtable,我有一个计时器每秒钟运行一次,我计划在计时器的每一个滴答声内进行检查 我有一个哈希表,它有两个整数,我试图设置为时间的值。 每次计时器滴答作响时,它都会将以前的值加1 我已经尝试在我的中直接修改哈希表,对于每个出现错误的语句,我还尝试创建一个新的哈希表,该哈希表存储密钥和新的时间,然后设置值。但是这会得到一个没有设置为对象实例的对象引用,这是没有意义的,因为有一个检查来确保它不是null 代码 Private Sub expiryTimer_Tick(sender As Object,

我有一个计时器每秒钟运行一次,我计划在计时器的每一个滴答声内进行检查

我有一个哈希表,它有两个整数,我试图设置为时间的值。 每次计时器滴答作响时,它都会将以前的值加1

我已经尝试在我的
中直接修改
哈希表
,对于每个出现错误的
语句,我还尝试创建一个新的
哈希表
,该哈希表存储密钥和新的时间,然后设置值。但是这会得到一个没有设置为对象实例的对象引用,这是没有意义的,因为有一个检查来确保它不是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)。