草庐IT

idle-timer

全部标签

c# - 串行调用 Threading.Timer.Change() 会重置计时器的时钟吗?

如果我调用Threading.Timer.Change()连续两次,下一次线程什么时候运行?例如:myTimer.Change(5000,Timeout.Infinite);//Only2secondspass.myTimer.Change(5000,Timeout.Infinite);在此之后,线程会在3秒或5秒后运行吗?我希望答案是后者,每次调用Change()都会重置计时器。如果没有,我将需要找到解决此问题的方法。 最佳答案 它将在5秒后运行。调用Change将重置初始计数。 关于

c# - 在退出程序之前等待 System.Threading.Timer 回调完成

我有一个List.每个计时器以可配置的时间间隔触发(默认10分钟)。所有调用相同的回调方法(具有不同的参数)。回调方法可能需要几秒钟才能完成其工作。当程序终止时,回调方法的执行似乎立即停止(我没看错吗?)。如何在退出程序之前优雅地等待任何当前正在执行的回调方法完成? 最佳答案 您可以使用WaitHandler参数处理所有计时器。仅当回调方法完成时才会向此处理程序发出信号(如规范所述:“在所有当前排队的回调完成之前,计时器不会被释放。”)voidWaitUntilCompleted(ListmyTimers){ListwaitHnd=

c# - 在 Windows 服务中从 OnStart 立即触发 timer_elapsed

我正在使用System.Timers.Timer,并且在c#windows服务的OnStart方法中有如下代码。timer=newTimer();timer.Elapsed+=timer_Elapsed;timer.Enabled=true;timer.Interval=3600000;timer.Start();这会导致timer_Elapsed中的代码从我启动服务后的一个小时开始每隔一小时执行一次。有没有办法让它在我启动服务时执行,然后每小时执行一次?timer_Elapsed调用的方法运行时间太长,无法直接从OnStart调用它。 最佳答案

c# - 如何防止 System.Timers.Timer 在线程池上排队执行?

标准System.Timers.Timer行为存在问题。计时器以一定间隔引发Elapsed事件。但是当Elapsed事件处理程序中的执行时间超过计时器间隔时,线程池开始排队处理事件。这是我的问题。这是因为我使用Elapsed事件处理程序从数据库中获取一些数据并对其进行处理,最后将结果保存回数据库。但是数据处理应该只提供一次。那么,有没有一种方法可以防止对System.Timers.Timer的经过事件进行排队。作为此问题的说明,您可以考虑下一个测试程序:publicclassEntryPoint{privatestaticvoidTimeProc(objectstate,Elapsed

c# - 调用 timer.Stop() 后执行的 System.Timers.Timer Elapsed 事件

背景:我有一个计时器,我用它来跟踪自serialPortDataReceived事件被触发以来已经过了多长时间。我正在为此创建自己的解决方案而不是使用内置的超时事件,因为我正在获取连续的数据流,而不是发送查询并获得一个响应。问题:在DataReceived处理程序中,我有一个停止计时器的语句,这样它就不会过去。问题是很多时候它仍然执行Elapsed处理程序后记。我读到可以使用SynchronizingObject来解决这个问题,但我不确定如何实现。这是我的代码:我试图删除所有我认为不相关的内容。privateSystem.Timers.TimertimeOut;privateSyste

c# - 将锁与 Threading.Timer 一起使用

我有一个Windows服务应用程序,它使用Threading.Timer和TimerCallback在特定时间间隔进行一些处理。我需要一次将此处理代码锁定到1个线程。因此,例如,启动服务并触发第一个回调,然后启动一个线程并开始处理。只要处理在下一次回调之前完成,这就可以正常工作。例如,处理时间比平时稍长,并且在另一个线程正在处理时再次触发TimerCallback,我需要让该线程等待另一个线程完成。这是我的代码示例:staticTimertimer;staticobjectlocker=newobject();publicvoidStart(){varcallback=newTimer

c# - Xamarin.iOS 中的 NSTimer 与 Timer - 何时使用什么?

在使用原生NSTimer还是使用.NET替代品时是否有规则?System.Windows.Forms.TimerSystem.Timers.TimerSystem.Threading.Timer 最佳答案 如果您的目标是可移植性,我会使用.NET计时器(见下文),除非您别无选择(例如方法的NSTimer参数)调用)。很遗憾,您的问题中没有列出我一直以来最喜欢的计时器,它是由Task类提供的:awaitTask.Delay(20);//dosomethingafterthedelay使用非常简单。因此,代替此Timer代码:voidf

c# - 我可以将匿名函数绑定(bind)到 Timer 的滴答事件吗?

如果Tick-handling函数只会在一个上下文中使用(即总是在同一个函数中与同一个Timer对象结合使用),为什么还要将它作为一个单独的函数呢?当我想到这个时,这就是我脑海中闪过的想法。是否可以将匿名函数与Timer的滴答事件关联起来?这就是我想要做的。TimermyTimer=newTimer();myTimer.Tick+=newEventHandler(function(objectsender,EventArgse){MessageBox.Show("Helloworld!");}); 最佳答案 您正在寻找Anonymo

c# - 单元测试 system.timers.timer

我一直在阅读有关使用计时器和线程进行单元测试的问题。我发现了有关单元测试system.threading.timers的SO问题,但我需要对system.timers.timer进行单元测试,而包装类似乎无法正常工作。我只需要知道如何模拟计时器和/或系统时间,以便对其进行单元测试。我似乎无法在谷歌上的任何地方找到这个。编辑和更新:这是有道理的,如果我通过如下包装提取计时器,我可以生成一个计时器并使用模拟将其替换为不同的计时器。相关的部分是获取我在运行时注入(inject)的计时器(原始的,而不是模拟的)并测试它的已用事件代码。 最佳答案

c# - 使 System.Threading.Timer 无效会停止吗?

如果我有一个活跃的System.Threading.Timer我将它设置为null,它停止了吗?我意识到调用.Dispose()更合适,但我想要问题的答案。publicclassFoo{privateSystem.Threading.Timer_timer;publicFoo(){//initializetimer}publicvoidKillTimer(){_timer=null;}}更新:经过反复讨论是否将对System.Threading.Timer的单个引用设置为null确实会导致停止它表明没有挥之不去的引用,例如事件列表,因为线程计时器接受单一回调并且不公开事件。如果GC收集