草庐IT

default_timer

全部标签

c# - System.Timers.Timer 非常不准确

我编写了一个程序,它通过Parallel.ForEach使用所有可用的核心。ForEach的列表包含约1000个对象,每个对象的计算需要一些时间(约10秒)。在这种情况下,我设置了一个这样的计时器:timer=newSystem.Timers.Timer();timer.Elapsed+=TimerHandler;timer.Interval=15000;timer.Enabled=true;privatevoidTimerHandler(objectsource,ElapsedEventArgse){Console.WriteLine(DateTime.Now+":Timerfire

c# - System.Timers.Timer 仅提供每秒最多 64 帧

我有一个应用程序使用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次,即使没有其他工作要做。这是一个“回放”应用程序,它必须复制传入的数据包,它们之

c# - BackgroundWorker & Timer,只读取日志文件的新行?

我的应用程序写入一个日志文件(当前使用log4net)。我想设置一个计时器和一个后台worker来读取日志文件并将其内容打印到我的表单中的某个控件中,同时它正在被写入。我不能使用FileSystemWatcher类,因为它似乎损坏了:有时事件“更改”会触发,有时不会。而且它的“池化率”极低。所以我创建了一个Timer和一个FileSystemWatcher。在计时器的“滴答”事件中,后台工作人员执行其工作。问题是:如何只读取自worker上次检查后添加的行?publicLogForm(){InitializeComponent();logWatcherTimer.Start();}pr

c# - 统一: Change default lifetime manager for implicit registrations and/or disable them

Unity容器将自动解析它可以自行识别的任何类型,无需手动注册。这在某些方面很好,但我遇到的问题是它使用TransientLifetimeManager来解决这种类型的问题,而我几乎总是想要一个ContainerControlledLifetimeManager。当然,我仍然可以手动将我的类型注册为单例,但如果我忘记了,应用程序将成功启动,而不是在启动时出现未处理的异常,并且一切似乎都正常工作。但最终会出现错误,可能非常微妙,难以诊断,因为存在一个类型的多个实例,这意味着是一个单例。所以我的问题是:有没有一种方法可以指定不同的默认生命周期管理器或完全禁用默认的自动解析行为并将容器限制为

c# - 在 asp.net 中使用 System.Timers.Timer

我在asp.net网站中使用以下代码。在应用程序初始化时,我调用了一次InitializeTimer()。代码的目标是每小时运行一次DoWork()(每小时1次)。我还希望代码在每个循环的不同时间执行,所以我添加了随机部分。我得到的结果很奇怪,我找不到解释为什么会这样。代码在2小时后执行函数,然后在2小时后再次执行,然后在3小时后执行,然后在2小时后执行,然后再次执行2小时。****谁能解释一下原因?usingSystem.Timers;....privatestaticrandom=newRandom();....publicstaticvoidInitializeTimer(){t

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# - 当 new-able 使用 new T(),否则使用 default(T)

我正在研究C#泛型函数。错误时,如果泛型类型可以是new-able,返回newT(),否则返回default(T)。代码如下:privateTFunc(){try{//trytodosomething...}catch(Exceptionexception){if(Tisnew-able)//我知道对于那些使用newT()的人来说,它需要whereT:new()。这个问题是,如何在运行时判断这个? 最佳答案 您只需要检查该类型是否具有无参数构造函数。您可以通过以空类型作为参数调用Type.GetConstructor方法来实现。va