Vb.net 创建计时器字典

Vb.net 创建计时器字典,vb.net,dictionary,timer,Vb.net,Dictionary,Timer,我正在为我们的应用程序编写一个调度程序,它将其任务从我们的中央数据库中提取出来。它运行从应用程序的外部“模块”到自定义SQL脚本的各种功能 我宣布如下: Dim ScheduleList As New DataTable Dim WithEvents Actions As New Dictionary(Of String, String)() Dim WithEvents Timers As New Dictionary(Of String, Timers.Timer)() 我的代码设置了一切

我正在为我们的应用程序编写一个调度程序,它将其任务从我们的中央数据库中提取出来。它运行从应用程序的外部“模块”到自定义SQL脚本的各种功能

我宣布如下:

Dim ScheduleList As New DataTable
Dim WithEvents Actions As New Dictionary(Of String, String)()
Dim WithEvents Timers As New Dictionary(Of String, Timers.Timer)()
我的代码设置了一切

Private Sub RunScheduleTasks()

    Dim result() As DataRow = ScheduleList.Select("TriggerType = 0 AND IsEnabled = 1") 'External Calls
    For Each row As DataRow In result
        Dim i As Integer = row(0)
        Actions.Add("action" + i.ToString, row(9).ToString)
        WriteLog("Action Added: " + i.ToString, "INFORMATION")

        Dim T As New System.Timers.Timer
        With T
            .Interval = Convert.ToInt32(row(7).ToString) * 1000
            AddHandler T.Elapsed, Sub(sender, e)
                                      Process.Start(row(9).ToString)
                                      WriteLog(row(9).ToString, "INFORMATION")
                                  End Sub

        End With
        Timers.Add("timer" + i.ToString, T)

        WriteLog("Timer Added: " + i.ToString, "INFORMATION")

        Timers("timer" + i.ToString).Start()
    Next
    WriteLog("Actions: " + Actions.Count.ToString, "INFORMATION")
    WriteLog("Timers: " + Timers.Count.ToString, "INFORMATION")

End Sub
我的问题是,它似乎只运行上次创建的对象,我的输出日志显示了其中的几个项目,但是在检查它们时,它们都显示为Void _Lambda$u 1()

问候
Mike

您的代码在循环中遇到变量捕获问题。通常情况下,vs会对此发出警告。重命名循环变量r,在下一行添加
Dim row=r
,然后它将捕获您需要的实际值,而不是最后一个值。太棒了,谢谢,这就解决了!这么小的东西。您是否能够解释在循环中声明它与使用循环变量之间的区别?您应该将visual studio警告视为错误的另一个原因。干杯您的代码在循环中受到变量捕获的影响。通常情况下,vs会对此发出警告。重命名循环变量r,在下一行添加
Dim row=r
,然后它将捕获您需要的实际值,而不是最后一个值。太棒了,谢谢,这就解决了!这么小的东西。您是否能够解释在循环中声明它与使用循环变量之间的区别?您应该将visual studio警告视为错误的另一个原因。干杯