停止计时器直到方法完成

时间:2012-12-17 08:40:02

标签: c# .net timer

有人可以帮我停止计时器,直到方法“Utils.ItsTimeToRemind(remind.FormTag);”完了吗?然后重新开始...

public static Timer TIMER; 

public TimerClass()
{
    TimerCallback callback = new TimerCallback(Tick);
    TIMER = new Timer(callback, null, 0, 1000);
}

static public void Tick(Object stateInfo)
{
    List<RemindObject> remList = Utils.Reminds;
    foreach (RemindObject remind in remList)
    {
        if (remind.reminTime.CompareTo(DateTime.Now) < 0)
        {
            Utils.ItsTimeToRemind(remind.FormTag);
        }
    }
}

3 个答案:

答案 0 :(得分:2)

您可以在timer方法中传递对Utils.ItsTimeToRemind的引用,因此它会变为:

Utils.ItsTimeToRemind(remind.FormTag, ref timer);

然后,您可以停止方法中的timer

public void ItsTimeToRemind(var, ref timer)
{
    timer.Stop();

    //Method stuff

    timer.Start();
}

答案 1 :(得分:2)

Neil Knight的解决方案存在一个小问题 - 最好在try-catch块中启动/停止计时器。如果抛出异常,您可以确保重新启动计时器:

using System.Timers.Timer;

private static Timer timer; 

static public void Tick(Object stateInfo)
{
    try
    {
        timer.Stop();


        List<RemindObject> remList = Utils.Reminds;
        foreach (RemindObject remind in remList)
        {
            if (remind.reminTime.CompareTo(DateTime.Now) < 0)
            {

                Utils.ItsTimeToRemind(remind.FormTag);
            }
        }
    }
    catch(Exception ex)
    {
        // log exception, etc
    }
    finally
    {
        timer.Start();
    }
}

答案 2 :(得分:0)

你可以使用另一个计时器,例如这个http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx允许你设置Enabled = false(你可以在输入你的Tick(或你想要的任何名称)方法中设置),以及做你的工作,然后在Tick方法结束时设置Enabled = true。