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