总结:在Windows服务和控制台应用程序中,我调用了一个包含计时器的公共(public)库,该计时器会定期触发大约需要30秒才能完成的操作。这工作正常,但是......当调用服务停止或应用程序退出并且计时器在ElapsedEventHandler中时,我需要服务停止/应用程序退出以等待事件处理程序完成。我通过在调用计时器停止方法时检查boolInEvent属性来实现此功能。虽然这很实用,但问题是:这是执行此操作的最佳方法吗?是否有替代方法可以更好地满足此目的?另一个问题是我需要避免服务停止请求因“服务无法响应停止请求”而失败这是我的实现publicsealedclassTimedPr
我正在尝试在我的Windows应用商店应用程序中设置计时器。publicvoidStart_timer(){Windows.UI.Xaml.DispatcherTimertimer=newDispatcherTimer();timer.Tick+=newWindows.UI.Xaml.EventHandler(timer_Tick);timer.Interval=newTimeSpan(00,1,1);boolenabled=timer.IsEnabled;//Enablethetimertimer.Start();//Startthetimer}点击按钮我调用上面的方法来设置这个定时
我在asp.net网站中使用以下代码。在应用程序初始化时,我调用了一次InitializeTimer()。代码的目标是每小时运行一次DoWork()(每小时1次)。我还希望代码在每个循环的不同时间执行,所以我添加了随机部分。我得到的结果很奇怪,我找不到解释为什么会这样。代码在2小时后执行函数,然后在2小时后再次执行,然后在3小时后执行,然后在2小时后执行,然后再次执行2小时。****谁能解释一下原因?usingSystem.Timers;....privatestaticrandom=newRandom();....publicstaticvoidInitializeTimer(){t
如果我调用Threading.Timer.Change()连续两次,下一次线程什么时候运行?例如:myTimer.Change(5000,Timeout.Infinite);//Only2secondspass.myTimer.Change(5000,Timeout.Infinite);在此之后,线程会在3秒或5秒后运行吗?我希望答案是后者,每次调用Change()都会重置计时器。如果没有,我将需要找到解决此问题的方法。 最佳答案 它将在5秒后运行。调用Change将重置初始计数。 关于
长话短说,我需要.Net中的精确计时器-以毫秒为单位的精度-意思是,如果我告诉它在10毫秒过去后触发事件,它必须这样做,+-1毫秒。内置的.NetTimer类的精度似乎为+-16ms,这对我的应用程序来说是NotAcceptable。我找到了这篇文章http://www.codeproject.com/Articles/98346/Microsecond-and-Millisecond-NET-Timer它为计时器提供了一个代码,这正是我所需要的(甚至更多-以微秒为单位)。但是,问题是,等效的OnTimer似乎是在另一个线程中执行的。所以,如果我添加一些代码,比如:label1.Tex
我需要编写一个接收事件的组件(该事件具有唯一ID)。每个事件都需要我发出请求。该事件指定了等待请求响应的超时时间。如果响应在计时器触发之前出现,很好,我取消计时器。如果计时器先触发,则请求超时,我想继续。这个超时时间是在事件中指定的,所以它不是常量。预期的超时时间在30秒到5分钟的范围内。我可以看到两种实现方式。为每个事件创建一个计时器,并将其放入将事件与计时器链接起来的字典中。创建一个包含超时DateTime的有序列表,以及一个新线程,每100毫秒循环一次以检查是否超时。选项1似乎是最简单的解决方案,但我担心创建这么多计时器可能不是一个好主意,因为计时器可能太昂贵了。创建大量定时器时
我并不是真的在写闹钟应用程序,但它有助于说明我的问题。假设我的应用程序中有一个方法,我希望在整点整点(例如晚上7:00、晚上8:00、晚上9:00等)调用此方法。我可以创建一个计时器并将其间隔设置为3600000,但最终这会与系统时钟不同步。或者我可以使用while()循环和Thread.Sleep(n)定期检查系统时间并在需要时调用方法时间到了,但我也不喜欢这样(Thread.Sleep(n)对我来说是一个很大的代码味道)。我正在寻找的是.Net中的一些方法,它允许我传入future的DateTime对象和方法委托(delegate)或事件处理程序,但我一直无法找到任何此类东西。我怀
我有一个List.每个计时器以可配置的时间间隔触发(默认10分钟)。所有调用相同的回调方法(具有不同的参数)。回调方法可能需要几秒钟才能完成其工作。当程序终止时,回调方法的执行似乎立即停止(我没看错吗?)。如何在退出程序之前优雅地等待任何当前正在执行的回调方法完成? 最佳答案 您可以使用WaitHandler参数处理所有计时器。仅当回调方法完成时才会向此处理程序发出信号(如规范所述:“在所有当前排队的回调完成之前,计时器不会被释放。”)voidWaitUntilCompleted(ListmyTimers){ListwaitHnd=
我正在使用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调用它。 最佳答案
我有一个int值为60的lblCountdown。我想让lblCountDown的int值随秒数递减,直到达到0。这是我目前所拥有的:privateintcounter=60;privatevoidbutton1_Click(objectsender,EventArgse){intcounter=60;timer1=newTimer();timer1.Tick+=newEventHandler(timer1_Tick);timer1.Interval=1000;//1secondtimer1.Start();label1.Text=counter.ToString();}private