0

有人可以帮我停止计时器,直到方法“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);
        }
    }
}
4

3 回答 3

2

您可以timerUtils.ItsTimeToRemind方法中传递对 的引用,因此它将变为:

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

然后,您可以停止timer该方法。

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

    //Method stuff

    timer.Start();
}
于 2012-12-17T08:43:12.387 回答
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();
    }
}
于 2012-12-17T08:58:34.453 回答
0

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

于 2012-12-17T08:43:00.763 回答