首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何立即触发timer.Elapsed事件

如何立即触发timer.Elapsed事件
EN

Stack Overflow用户
提问于 2011-08-03 17:08:01
回答 10查看 80.9K关注 0票数 66

我使用System.Timers.Timer类创建一个带有Timer.Elapsed事件的计时器。问题是,只有在间隔时间过后,才会第一次触发Timer.Elapsed事件。

有没有办法在启动计时器后立即引发Timer.Elapsed事件?

我在System.Timers.Timer类中找不到任何相关的属性。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2011-08-03 17:10:26

只需自己调用Timer_Tick方法即可。

如果您不想处理Tick回调方法的参数,那么只需将Timer_Tick中的代码放到另一个方法中,然后从Timer_Tick和Timer.Start()调用之后调用该方法

正如@Yahia所指出的,您还可以使用System.Threading.Timer计时器,您可以将其设置为初始延迟为0。不过请注意,回调将在不同的线程上运行,而不是在UI线程上运行的 Windows.Forms.Timer 上的回调。因此,如果您使用System.Threading.Timer (未正确调用)更新任何UI控件,它将崩溃。

票数 34
EN

Stack Overflow用户

发布于 2012-11-02 18:21:59

我只是用空参数调用了**ElapsedEventHandler**

票数 25
EN

Stack Overflow用户

发布于 2015-06-02 22:24:26

我知道这个答案有点晚,但是如果你想让你的System.Timers.Timer在100ms (默认时间间隔)内触发,那么你只需要在没有指定时间间隔的情况下初始化Timer对象,然后将被调用函数中的时间间隔设置为你喜欢的任何时间间隔。下面是我在Windows服务中使用的示例:

代码语言:javascript
复制
private static Timer _timer;

protected override void OnStart(string[] args)
{
    _timer = new Timer(); //This will set the default interval
    _timer.AutoReset = false;
    _timer.Elapsed = OnTimer;
    _timer.Start();
}

private void OnTimer(object sender, ElapsedEventArgs args)
{
    //Do some work here
    _timer.Stop();
    _timer.Interval = 50000; //Set your new interval here
    _timer.Start();
}
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6924072

复制
相关文章

相似问题

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