我在计时器(System.Timers.Timer)上执行它时有一个慢速方法。执行时间有时比计时器的超时时间长,导致计时器等待。我希望我将定时器设置为30ms,例如30ms后,重置方法,而不是等待。我应该使用什么样的计时器?
编辑:
void OnTimerElapsed() {
SomeMethod(args1);
SomeMethod(args2);
SomeMethod(args3);
}
SomeMethod位于另一个程序集中。它是一种同步方法,它从另一个应用程序请求数据。我不知道为什么它有时会挂起。这导致计时器暂停,直到SomeMethod()继续。
答案 0 :(得分:1)
使用System.Timers.Timer
并将其AutoReset
设置为false,仅在上一次结束或自定义条件时启动它。这是我使用的模式:
private System.Timers.Timer _timer = new System.Timers.Timer();
private volatile bool _requestStop = false;
private void InitializeTimer()
{
_timer.Interval = 100;
_timer.Elapced += OnTimerElapced;
_timer.AutoReset = false;
_timer.Start();
}
private void OnTimerElapced(object sender, System.Timers.TimerEventArgs e)
{
//_timer.Stop();//if AutoReset was not false
//do work....
if (!_requestStop)
{
_timer.Start();//restart the timer
}
}
private void Stop()
{
_requestStop = true;
_timer.Stop();
}
private void Start()
{
_requestStop = false;
_timer.Start();
}
编辑:如果你想观看计时器,如果操作需要更长的时间,那么你不应该首先使用计时器,而是使用包装你的操作一个新线程并使用MaunalResetEvent
,使用其WaitOne
方法指定超时,如果发生超时,则停止或关于操作。