Xml 如何让windows服务使用计时器vb.net执行相同的代码
编辑 结果发现有一个例外:Xml 如何让windows服务使用计时器vb.net执行相同的代码,xml,vb.net,service,dictionary,windows-services,Xml,Vb.net,Service,Dictionary,Windows Services,编辑 结果发现有一个例外: 我希望在每次执行时覆盖字典键和项,因为数据需要是最新的。有什么方法可以解决我的问题吗?以下是我在服务中如何做到这一点的方法(在编写服务时,我倾向于遵循一种非常类似的模式,但我不确定您的时间延迟-您是希望在创建文件之间间隔10秒,还是每隔10秒开始创建一个文件?这是一个微妙的区别,但想象一下,如果创建文件需要30秒,会发生什么情况…) 最有可能的解释是引发了异常。请将时间间隔设置为更长的值,并在启用计时器之前进行设置。然后使用调试器连接到服务,看看会发生什么情况。尝试
我希望在每次执行时覆盖字典键和项,因为数据需要是最新的。有什么方法可以解决我的问题吗?以下是我在服务中如何做到这一点的方法(在编写服务时,我倾向于遵循一种非常类似的模式,但我不确定您的时间延迟-您是希望在创建文件之间间隔10秒,还是每隔10秒开始创建一个文件?这是一个微妙的区别,但想象一下,如果创建文件需要30秒,会发生什么情况…)
最有可能的解释是引发了异常。请将时间间隔设置为更长的值,并在启用计时器之前进行设置。然后使用调试器连接到服务,看看会发生什么情况。尝试以下操作:
Public Sub DoNextExecution()
SyncLock Me
thisTimer.Stop()
Try
GetInfo()
GetUsers()
GetProcess()
GetServices()
GetCPU()
GetMem()
WriteXML()
Catch ex as Exception
' TODO: Log the exception somehow!
End Try
' Another execution cycle begins.
thisTimer.Start()
End SyncLock
End Sub
注意:您不需要将计时器的AutoRestart设置为true或call Stop()如果你每次都要调用计时器的Start方法。结果是它抛出了一个异常。我在帖子中附上了一个它的屏幕截图。我有点不确定我现在是否需要解决如何在每次执行时覆盖字典的内容?是的,你每次都需要重新创建容器。不这样做是原因我在我的帖子中附上了它的屏幕截图。我有点不确定我现在是否需要解决如何在每次执行字典时覆盖它的内容?你可以添加这样一行:
if dict.ContainsKey(1)然后dict.Remove(1)
就在添加之前。或者您可以执行dict.Clear()在每次运行开始时。这取决于您希望词典如何更新。现在您可以看到异常,您已经知道答案了,对吗?我猜我需要获取词典以允许覆盖记录?但是我不确定如何才能做到这一点。您不能做到这一点。您必须首先检查词典是否已经存在“包含”该条目。
Public Sub DoNextExecution()
SyncLock Me
thisTimer.Stop()
Try
GetInfo()
GetUsers()
GetProcess()
GetServices()
GetCPU()
GetMem()
WriteXML()
Catch ex as Exception
' TODO: Log the exception somehow!
End Try
' Another execution cycle begins.
thisTimer.Start()
End SyncLock
End Sub