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

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 に答える
2

timerメソッドで への参照を渡すことができるため、次のUtils.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 に答える
0

このhttp://msdn.microsoft.com/en-us/library/system.timers.timer.aspxなどの別のタイマーを使用して、 Enabled = false を設定できます (これは、 Tick (または任意の名前) メソッドを呼び出して作業を行い、Tick メソッドの最後で Enabled = true を設定します。

于 2012-12-17T08:43:00.763 に答える