问题标签 [system.timers.timer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1331 浏览

c# - System.Timers.Timer 的问题。偶尔触发不止一次

我使用 System.Timers.Timer 每天备份一次我的 SQL Server Express 数据库。大多数时候,它似乎工作正常。有时,ElapsedEventHandler 会以 1 或 4 分钟的间隔多次调用。它应该每天打一次。我将 AutoReset 设置为 false,并在 ElapsedEventHandler 结束时调用 Start。此外,可能相关的是我确实重新计算了间隔,以便计时器总是在接近凌晨 1 点时关闭。尽可能。备份数据库可能需要几分钟,如果我不更改间隔,时间可能会漂移到无法接受的程度。我提到这一点是因为这些链接表明重置间隔可能存在问题:

特别参见 Hans Passant 的答案

但是,我不知道如何避免重置间隔。另外,我查看了 System.Timers.Timer 的代码。似乎只是重置间隔不会再次启动计时器。我不反对使用不同的计时器(System.Threading.Timer?),但我想先知道发生了什么。

我已经粘贴了下面的所有代码。我认为真正相关的部分是方法:DatabaseBackupTimerOnElapsed

最后,我会提到程序有时会停止并重新启动(如果代码的其他部分存在未捕获的异常)。我会假设所有计时器在退出程序时都会被杀死,即使没有调用 Dispose ?那就是定时器不存在于操作系统中?

编辑我被要求写一个小的、完整的、可验证的例子。我在这里这样做。我保留了完整的示例,因为有人可能会声称(非常正确!)我取出了一个重要的细节。我已经运行了这段代码并没有看到问题,但是它只是在原始代码中偶尔发生。

结束编辑

0 投票
1 回答
149 浏览

c# - C# system.timers.timer 奇怪的行为

我正在尝试实现 Bully Coordinator 选举算法。在该算法中,Coordinator 每隔 10 秒发送一次存活消息,所有进程至少等待 14 秒才能接收到存活消息,如果在这段时间内没有收到消息,它们将发起死协调者选举。

问题是 AliveTimer (Timer3_Count) 呈指数增长,并且活动进程也在影响它。我不知道为什么它的行为很奇怪。

当初始协调器发送 Alive 消息时,计数器工作正常,但在死亡协调器选举后,它的行为很奇怪。

elapsed 函数在这里我认为我的程序有问题,我尝试了所有方法。

和死协调员选举代码在这里

完整的代码可以在这里找到 欺凌算法

注意:我使用被动服务器只是为了广播来自每个进程的消息

0 投票
1 回答
650 浏览

c# - C# Window Service 不调用定时器函数

在我的 Window Service 应用程序中,计时器函数永远不会被调用。我在我的机器上部署了该服务,然后将该服务附加到 Visual Studio,并在不同功能上设置断点。在OnStart()没有调用我的任何函数之后。

这是我的OnStart()功能

2017 年 9 月 12 日更新:在 try and catch 中添加了事件日志, 然后调用此函数timer1_tick()

timer1_tick永远不会被调用。有什么建议么?

2017 年 12 月 9 日更新:我检查了事件日志。在 Windows 日志 > 应用程序下,我可以看到消息,服务已成功启动。但是,不会显示在 try-catch 块中添加的事件日志。不确定我是否遗漏了什么。

我将该服务附加到 Visual Studio 以进行调试。在下图中,OnStart()调用了该方法。我刚刚添加了,Thread.Sleep(30000)以便我有一些缓冲时间将进程附加到调试器以避免跳过该OnStart()函数

在此处输入图像描述

定时器启动后,我在 TimerTick() 函数上有一个断点,希望它被击中,但它从来没有

在此处输入图像描述

0 投票
2 回答
158 浏览

c# - C# 中的线程。使用计时器、线程和调用 shell 同时输出所有内容

我在阅读大量有关计时器、线程和调用异步进程(cmd 文件)的文档时陷入两难境地,无法确定哪种方法和哪种组合最适合我的方案..

我的场景:

  1. 带有 .NET Framework 4.6 的控制台应用程序
  2. 我有一个字典,它有一个(作为键)一个 int 来预测特定秒的值。
  3. 该过程从第二个零 (0) 开始
  4. 当从开始(步骤 3)经过的秒数与字典的键(在步骤 2 中)相同时,我必须调用一个(或多个)进程(每次都不同,进程启动)。这必须在同一秒内,所以所有调用都必须在不同的线程中(我假设)
  5. 这个过程需要一秒钟多的时间才能完成,我有一个异步调用来处理一个事件以获取响应。

到目前为止我得到了什么:

我每秒都在运行一个 System.Thread.Timer,它带有一个示例处理程序,如果该秒有任何值作为键,则该处理程序调用一个进程。
但是我不知道必须使用哪个计时器(Form,Timer,Thread)才能以更好的性能/方式抱怨这一点。我读过这个,但我认为理解它有点复杂。这也许是我的第一个问题,一个很好的实现。

我也用 Ohad Schneider 的回答调用了这个过程: 是否有任何异步等效的 Process.Start?

但同样,我必须使用选择的计时器类型来调用异步/异步的哪个组合?

我在这里有点迷路,对不起我的英语,对这篇文章的任何评论、回答、建议或版本都将受到重视。谢谢你的耐心

0 投票
0 回答
82 浏览

c# - c# Timer 方法限制

我们正在建立一个可以处理每日/每周/每月/每季度作业运行的服务。我们面临的问题是关于季度工作的。我们刚刚发现,在运行我们的工作时,它Timer()在我们的代码中的这一点上失败了:

var lapsedlapsed 最终超过 7,500,000,000 毫秒。

错误是:

Invalid valud 7,500,00,00 for parameter 'interval'

所以现在我们按照Timer()定义理解了 Timer() 间隔:

// Parameters: // interval: // The time, in milliseconds, between events. The value must be greater than zero // and less than or equal to System.Int32.MaxValue.

我们意识到我们不能传递大于System.Int32.MaxValue(或 2,147,483,647)的区间值

我的问题:

我试图想办法模拟这个季度的“工作服务”功能,同时解决这个毫秒间隔限制。

例如,也许我可以将作业标记为“每月”,但逻辑将每周检查作业 - 只有当我们到达下一个季度时才执行实际的作业对象。

我对此有点坚持,因此非常感谢任何指导和/或建议....

0 投票
1 回答
668 浏览

c# - 哪个是对 System.Timers.Timer 使用 Stop/Start timer vs SynchronizingObject vs lock?

重要提示:根据评论,我猜想所有的解决方案都在使用这个注释确实在我的应用程序中我正在尝试将它们结合起来。顺便说一句,在投票之前,您可以向我询问详细信息。

重要说明2:顺便说一句,由于SO不同于MSO downvotes或close votes鼓励删除问题,我不会,否则所有有价值的评论和答案都将被删除。这是一个帮助并尝试相互理解的地方

这是 linqpad 代码的 4 种不同实现中最基本的。除了首先所有其他人提供所需的输出。

你能为他们解释一下细节吗?

由于我的应用程序中有许多计时器,因此我需要以最适合使用的完整代码来管理和同步,以及替代解决方案的优缺点是什么

既没有 SynchronizingObject 也没有计时器停止/启动也没有锁定

给出:

4 5 6 7 8 9 11 12 13 14 15 15 15 17 18 20 21 22


使用同步对象:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20


带定时器启动/停止

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20


终于带锁了

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

同步器看起来像:

0 投票
0 回答
187 浏览

c# - C#实时跟踪应用程序中的记录时间并将警报发送回用户

我需要使用C# ASPMVC跟踪记录的时间和用户在应用程序中执行的其他操作来构建一个 Web 应用程序,并使用SignalR.

我的问题是在服务器端。例如:

用户 A 登录到应用程序。在那一刻,应用程序必须开始跟踪用户连接的时间。10 分钟后,服务器将向用户客户端发送一些消息(使用SignalR)。

同时,当用户连接时,他可能会点击一个特定的按钮,服务器必须跟踪TimeStamp用户点击该按钮的时间,并开始实时计算服务器端经过的时间。当这段时间过去达到 90 秒时,我必须向客户端发送一条消息。

例如,我们可以有 50 个用户,服务器端必须监视所有这些计时器并将消息发送给每个用户。

如何在服务器端解决这个问题,如何保持用户经过的时间并在达到特定时间规则时触发服务器端事件?

0 投票
1 回答
667 浏览

c# - Windows 服务(带计时器)在没有控制台的情况下无法工作

我用 Timers.Timer 做一个 Windows 服务。如果我作为控制台应用程序运行正常,但如果我将设置更改为 Windows 应用程序并评论所有控制台功能,则计时器不起作用。使用 Console.ReadLine(); 都好。但我不应该打开控制台。

设置定时器()

OnTimedEvent()

Program.cs Main()

谢谢你的回答

0 投票
1 回答
130 浏览

c# - Auction Timer is not working as expected in Asp.net webAPI

Following is the code for my Auction Timer what i am trying to do here is making an auction storing starting and ending date so lets say an auction is going to last for 5 hours so the end date will be 5 hours from current time i am starting the Auction timer right after storing the end date for the auction it is working as expected but the problem i am facing now is the timer is bit delay from the end time around 2,3 minutes roughly that's means the process which is suppose to run immediately after the auction expires is running 2,3 minutes late i am not really sure what i am missing here.

0 投票
2 回答
367 浏览

c# - 以不同的间隔时间调用不同的API,保存在我的数据库表中

我有一个来自不同客户端的 API 列表保存在我的数据库表中,并且所有 API 都有不同的时间间隔来调用 API。我调用 API 的方法应该是什么。新数据可能会添加到 API 列表列表中。我应该选择动态计时器吗?

  1. 我有一个客户端用来添加新记录的应用程序 (GUI)。
  2. 这些记录表示 API url 和应该调用该 API 的时间(计划)。
  3. 您的挑战是编写能够在指定的时间表/时间调用所有客户端指定的 API 的代码。