我有一个应用程序使用System.Timers.Timer对象来引发由主窗体(WindowsForms,C#)处理的事件。我的问题是,无论我将.Interval设置多短(甚至设置为1毫秒),我每秒最多只能获得64次。我知道Forms计时器有55毫秒的精度限制,但这是System.Timer变体,而不是Forms。该应用占用1%的CPU,因此它绝对不受CPU限制。所以它所做的就是:将计时器设置为1&nsp;ms当事件触发时,递增_Count变量再次将其设置为1&nsp;ms并重复_Count每秒最多递增64次,即使没有其他工作要做。这是一个“回放”应用程序,它必须复制传入的数据包,它们之
我的应用程序写入一个日志文件(当前使用log4net)。我想设置一个计时器和一个后台worker来读取日志文件并将其内容打印到我的表单中的某个控件中,同时它正在被写入。我不能使用FileSystemWatcher类,因为它似乎损坏了:有时事件“更改”会触发,有时不会。而且它的“池化率”极低。所以我创建了一个Timer和一个FileSystemWatcher。在计时器的“滴答”事件中,后台工作人员执行其工作。问题是:如何只读取自worker上次检查后添加的行?publicLogForm(){InitializeComponent();logWatcherTimer.Start();}pr
总结:在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=