Vb.net 创建计时器字典
我正在为我们的应用程序编写一个调度程序,它将其任务从我们的中央数据库中提取出来。它运行从应用程序的外部“模块”到自定义SQL脚本的各种功能 我宣布如下: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)() 我的代码设置了一切
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警告视为错误的另一个原因。干杯