我有一个定时器,它在运行时进行特定的操作(间隔为1000毫秒),有什么方法可以防止定时器启动延迟,并在第一次进入函数并开始执行代码?
private void timer_Tick(object sender, EventArgs e)
{
labelStatus.Text = "Waiting for next file" + "(" + (class.property / 1000).ToString("#0.##0") + " seconds)";
class.property -= 1000;
}我希望计时器立即开始计数(更新标签),而不是在第一次标签更新之前等待1秒
发布于 2012-03-15 00:52:31
是什么阻止您提取运行到Timer_Elapsed事件中的代码并创建独立的过程(也称为重构)。
一旦你有了你的过程,就在启动计时器之前调用它。
例如,来自以下内容:
private void Timer_Elapsed(object sender, TimerElapsedEventArgs e)
{
int a = 0;
for(i=0; i<100;i++)
a += i;
}到……
private void Timer_Elapsed(object sender, TimerElapsedEventArgs e)
{
ExecuteCalc();
}
private void ExecuteCalc()
{
int a = 0;
for(i=0; i<100;i++)
a += i;
}在你的代码中:
ExecuteCalc();
Timer1.Enabled = true;发布于 2012-03-15 00:54:23
你可以简单地执行计时器在你启用它之前滴答作响时应该执行的代码,而不是像你现在这样做。
示例:
public Main()
{
DoWork();
Timer1.Enabled = true;
}
protected void Timer1_Tick(object sender, args e)
{
DoWork();
}发布于 2012-03-15 02:24:03
您可以像这样“伪造”对tick处理程序的调用:
timer_Tick(null, null);当你第一次启动计时器的时候。然而,这是一种糟糕的形式,最好将您的代码(重构)提取到一个方法中并调用该方法。然后让你的处理程序调用与Steve提到的相同的方法:
private void timer_Tick(object sender, EventArgs e)
{
UpdateLabel();
}
private UpdateLabel()
{
labelStatus.Text = "Waiting for next file" + "(" + (class.property / 1000).ToString("#0.##0") + " seconds)";
class.property -= 1000;
}现在,就像Jeff向你展示的那样,称之为:
UpdateLabel();
timer.Enable = true;https://stackoverflow.com/questions/9706289
复制相似问题