C# NET框架中计时器的可靠替代品?
在.Net中是否存在计时器类的可靠替代方案?C# NET框架中计时器的可靠替代品?,c#,.net,asp.net,vb.net,C#,.net,Asp.net,Vb.net,在.Net中是否存在计时器类的可靠替代方案? 我们的System.Timer.Timer和System.Threading.Timer出现问题,例如,它们很快启动,或者有时在长时间不活动(49天后)后熄灭。 我看到他们似乎有很多问题,比如这里: 我们不能使用窗体计时器。 我们正在考虑将线程暂停一段时间而不是计时器…描述了.Net framework中计时器类之间的差异 但也许另一种方法能有所帮助: 如果您必须等待如此长的时间,那么最好在您希望开始某项工作时计算DateTime。之后,您的任务每秒
我们的System.Timer.Timer和System.Threading.Timer出现问题,例如,它们很快启动,或者有时在长时间不活动(49天后)后熄灭。
我看到他们似乎有很多问题,比如这里:
我们不能使用窗体计时器。
我们正在考虑将线程暂停一段时间而不是计时器…描述了.Net framework中计时器类之间的差异 但也许另一种方法能有所帮助: 如果您必须等待如此长的时间,那么最好在您希望开始某项工作时计算
DateTime
。之后,您的任务每秒钟唤醒一次(或需要任何精度),并将当前时间与所需时间进行比较。如果当前时间等于或大于此值,请开始工作。否则就去睡觉(直到下一秒,小时,毫秒,随便什么)。顺便说一下,这就是Microsoft Task Scheduler的工作方式。描述了.Net framework中计时器类之间的差异
但也许另一种方法能有所帮助:
如果您必须等待如此长的时间,那么最好在您希望开始某项工作时计算
DateTime
。之后,您的任务每秒钟唤醒一次(或需要任何精度),并将当前时间与所需时间进行比较。如果当前时间等于或大于此值,请开始工作。否则就去睡觉(直到下一秒,小时,毫秒,随便什么)。顺便说一句,这就是Microsoft Task Scheduler的工作方式。您可以在Tick/appeased事件处理程序中每隔48天用一个新实例替换计时器
线程很可能会工作,但它值得额外的开销吗?您可以在Tick/appeased事件处理程序中每隔48天用一个新实例替换计时器
线程很可能会工作,但它值得额外的开销吗?我也意识到这些限制,并实现了自己的计时器。做出那个决定很糟糕,但到目前为止我还没有后悔。作为奖励,我自己的计时器实现了一个接口,这样使用计时器的类就可以很容易地进行单元测试 一些.NET计时器还存在一个问题,即它们可能在最后一次回调完成之前调用回调
我建议将计时器逻辑放在它自己的类中,而不是暂停线程。我也知道这些限制,并实现了自己的计时器。做出那个决定很糟糕,但到目前为止我还没有后悔。作为奖励,我自己的计时器实现了一个接口,这样使用计时器的类就可以很容易地进行单元测试 一些.NET计时器还存在一个问题,即它们可能在最后一次回调完成之前调用回调 我建议将计时器逻辑放在它自己的类中,而不是暂停线程。我认为您需要 秒表通过计算底层计时器机制中的计时器滴答声来测量经过的时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则Stopwatch类将使用该计数器测量经过的时间。否则,Stopwatch类使用系统计时器来测量经过的时间使用频率和分辨率字段确定秒表计时实施的精度和分辨率。 我想你需要 秒表通过计算底层计时器机制中的计时器滴答声来测量经过的时间。如果安装的硬件和操作系统支持高分辨率性能计数器,则Stopwatch类将使用该计数器测量经过的时间。否则,Stopwatch类使用系统计时器来测量经过的时间使用频率和分辨率字段确定秒表计时实施的精度和分辨率。
您是否考虑过对长时间重复的活动使用任务计划程序?与框架计时器不同,这将在重新启动(如补丁星期二)期间起作用。您是否考虑过对长时间重复的活动使用任务计划程序?与框架计时器不同,这将在重新启动(如补丁星期二)期间起作用。秒表用于测量某件事情需要多长时间,它不会在指定的时间后启动某些进程。同意,我建议使用秒表和@Oliver方法(有时醒来并检查经过的时间)。秒表用于测量某件事情需要多长时间,它不会在指定时间后启动某些过程。同意,我建议使用@Oliver方法(有时醒来并检查经过的时间)来使用秒表。