我正在使用'System.Windows.Forms.Timer'来重复任务。但是当计时器启动时,我必须在任务开始之前等待一个间隔。间隔设置为10秒,以便给任务足够的时间来完成它。但是有一种“尴尬的沉默”等着它第一次开始。有没有办法在启用计时器时触发Tick事件? (我无法使用线程,回调或事件来重复任务)
private int counter;
Timer t = new Timer();
private void InitializeTimer()
{
counter = 0;
t.Interval = 750;
t.Enabled = true;
t.Tick += new EventHandler(timer1_Tick);
}
private void timer1_Tick(object sender, EventArgs e)
{
if (counter >= 3)
{
t.Enabled = false;
}
else
{
//do something here
counter++;
}
}
答案 0 :(得分:8)
您可以随时手动调用方法:
private void InitializeTimer()
{
counter = 0;
t.Interval = 750;
t.Enabled = true;
timer1_Tick(null, null);
t.Tick += new EventHandler(timer1_Tick);
}
答案 1 :(得分:8)
您可以使用System.Threading.Timer
。
这个constructor需要一段初始等待时间。将此值设置为零,计时器将立即触发回调,然后是您之后指定的每个间隔。
Timer stateTimer = new Timer(tcb, autoEvent, 0, 750);
答案 2 :(得分:3)
只需创建一个方法,然后在计时器内调用它,也就在启动计时器之前。
private int counter;
Timer t = new Timer();
private void InitializeTimer()
{
counter = 0;
t.Interval = 750;
DoMything();
t.Tick += new EventHandler(timer1_Tick);
t.Enabled = true;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (counter >= 3)
{
t.Enabled = false;
}
else
{
//do something here
counter++;
DoMything();
}
}
private void DoMything()
{
//Do you stuff here
}
答案 3 :(得分:1)
最简单的方法可能是将Interval
初始设置为非常小的值,然后在Tick
处理程序中或在单独的处理程序中增加它。
这将确保第一个“滴答”以与后续滴答相同的方式发生,例如在它自己的线程上,而不是在initialize方法的上下文中。