【问题标题】:vb.net - Timer stops working when stopped and startedvb.net - 定时器在停止和启动时停止工作
【发布时间】:2020-01-12 19:55:02
【问题描述】:

我有一个运行多个计时器的应用程序。

第一个是心跳计时器,HB_Timer,它会在设定的时间间隔内触发一个后台工作程序,该工作程序运行一个 sql 命令来注册一个“心跳”。 第二个是重新初始化计时器,Reinit_Timer,它再次触发后台工作程序以从数据库中查询全局设置,如果心跳间隔的值发生变化,则停止 HB_Timer,相应地更改 HB_Timer.Interval,然后重新启动 HB_Timer。

我已经稍微修改了下面的代码,使其采用最简单的格式。 数据库中的心跳间隔以秒为单位保存,因此在应用间隔之前我乘以 1000 得到毫秒...

 Public Function Endpoint_ReInit()
    Try
        HB_Timer.Stop()
        hb_interval = ReadSQLValue(<the data i need to read...>)
        If hb_interval > 0 Then HB_Timer.Interval = (hb_interval * 1000)
        HB_Timer.Start()

由于某种原因,一旦计时器停止,它就不会以编程方式再次启动,我不明白为什么。 我在计时器的滴答事件和触发后台工作人员时添加了 console.writeline ......两者都在它停止然后重新启动之前工作,然后都没有工作(显然,如果第一个没有,那么第二个肯定不会)。

我想知道它是否会很快,因此尝试在停止和启动之间的一段时间内睡觉,但这没有奏效。

我什至尝试在我的表单上添加一个临时按钮以查看是否可以手动重新启动计时器,但这也不起作用。

我的所有函数等都有错误处理,并且没有抛出异常。

我有点不知所措....谁能帮我指出正确的方向?

【问题讨论】:

    标签: vb.net timer backgroundworker


    【解决方案1】:

    猜测SQL查询返回的值很大,所以不是计时器停止,只是它需要很长时间才能滴答作响。

    或者您的后台工作人员发生了崩溃,因此您的timer.Start() 永远不会被调用(对ReadSQLValue() 的调用永远不会返回)。如果ReadSQLValue() 使用BackgroundWorker,虽然我不确定您是如何管理同步/异步混合的,但请注意,当BackgroundWorker 在DoWork() 中遇到异常时,它可能不会出现在您的代码中在它发生的时候。 BGW 只是使用在 Error 属性中有异常的 EventArgs 触发 RunWorkerCompleted 事件)

    当我使用计时器时,我倾向于将它们设置为某个较低的间隔,例如 1 秒,如果我希望一个进程每分钟发生一次,另一个进程每分钟发生一次,我有几个从 60 开始倒计时的整数/120 分别当它们达到 0 时,我执行这些过程,并将整数重置回 60/120。我不会停止/启动/更改计时器间隔

    【讨论】:

    • 我安慰了这些值并三重检查了它们,一切似乎都很好。
    • 我实际上已经设法通过将计时器类型更改为 system.timers.timer 来让它工作 - 但我仍然不确定为什么它不能正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2016-01-03
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多