首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止定时器在第一次启动时延迟启动?

如何防止定时器在第一次启动时延迟启动?
EN

Stack Overflow用户
提问于 2012-03-15 00:47:24
回答 3查看 4.6K关注 0票数 3

我有一个定时器,它在运行时进行特定的操作(间隔为1000毫秒),有什么方法可以防止定时器启动延迟,并在第一次进入函数并开始执行代码?

代码语言:javascript
复制
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秒

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-15 00:52:31

是什么阻止您提取运行到Timer_Elapsed事件中的代码并创建独立的过程(也称为重构)。

一旦你有了你的过程,就在启动计时器之前调用它。

例如,来自以下内容:

代码语言:javascript
复制
private void Timer_Elapsed(object sender, TimerElapsedEventArgs e)
{
    int a = 0;
    for(i=0; i<100;i++)
       a += i;
}

到……

代码语言:javascript
复制
private void Timer_Elapsed(object sender, TimerElapsedEventArgs e)
{
    ExecuteCalc();
}
private void ExecuteCalc()
{
    int a = 0;
    for(i=0; i<100;i++)
       a += i;
}

在你的代码中:

代码语言:javascript
复制
ExecuteCalc();
Timer1.Enabled = true;
票数 3
EN

Stack Overflow用户

发布于 2012-03-15 00:54:23

你可以简单地执行计时器在你启用它之前滴答作响时应该执行的代码,而不是像你现在这样做。

示例:

代码语言:javascript
复制
public Main()
{
    DoWork();
    Timer1.Enabled = true;
}


protected void Timer1_Tick(object sender, args e)
{
    DoWork();
}
票数 3
EN

Stack Overflow用户

发布于 2012-03-15 02:24:03

您可以像这样“伪造”对tick处理程序的调用:

代码语言:javascript
复制
timer_Tick(null, null);

当你第一次启动计时器的时候。然而,这是一种糟糕的形式,最好将您的代码(重构)提取到一个方法中并调用该方法。然后让你的处理程序调用与Steve提到的相同的方法:

代码语言:javascript
复制
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向你展示的那样,称之为:

代码语言:javascript
复制
UpdateLabel();
timer.Enable = true;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9706289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档