如何使超时定时器

时间:2011-08-10 16:20:42

标签: .net timer c#-2.0

我在计时器(System.Timers.Timer)上执行它时有一个慢速方法。执行时间有时比计时器的超时时间长,导致计时器等待。我希望我将定时器设置为30ms,例如30ms后,重置方法,而不是等待。我应该使用什么样的计时器?

编辑:

void OnTimerElapsed() {
      SomeMethod(args1);
      SomeMethod(args2);
      SomeMethod(args3);
}

SomeMethod位于另一个程序集中。它是一种同步方法,它从另一个应用程序请求数据。我不知道为什么它有时会挂起。这导致计时器暂停,直到SomeMethod()继续。

1 个答案:

答案 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方法指定超时,如果发生超时,则停止或关于操作。