如何立即触发timer.Elapsed事件

我正在使用System.Timers.Timer类创buildTimer.Elapsed事件的计时器。 事情是Timer.Elapsed事件只有在间隔时间过后才会被第一次触发。

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

我无法findSystem.Timers.Timer类中的任何相关的属性。

只需要调用Timer_Tick方法。


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


正如@Yahia指出的那样,你也可以使用System.Threading.Timer定时器,你可以设置它的初始延迟为0. 请注意,尽pipe如此,callback将运行在不同的线程,而不是callback在UI线程上运行的Windows.Forms.Timer 所以如果你使用System.Threading.Timer更新任何UI控件(没有正确调用),它会崩溃。

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

不知道关于System.Timers.Timer但尝试

 System.Threading.Timer T = new System.Threading.Timer(new TimerCallback(DoSomething), null, 0, 30000); 

这会立即开始(第一次运行0毫秒,后续运行30000毫秒)…

看到
http://msdn.microsoft.com/en-us/library/system.threading.timer.aspx
http://msdn.microsoft.com/en-us/library/2x96zfy7.aspx

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

 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(); } 

如果您希望能够随时启动事件(不仅在您启动计时器的那一刻),您可以在您自己的MyTimer类中封装一个计时器。 这个类公开了原始的Timer方法和属性。 此外,我添加了一个明确的添加和删除事件。 通过这种方式,无论何时将事件添加到事件,都会将其添加到私有MyTimer事件和原始计时器Elapsed事件。 这意味着计时器以通常的方式触发Elapsed,但是您可以手动触发调用RaiseElapsed的事件(这听起来应该更简单一些)。

 public class MyTimer { Timer t = new Timer(); event ElapsedEventHandler timerElapsed; public event ElapsedEventHandler Elapsed { add { t.Elapsed += value; timerElapsed += value; } remove { t.Elapsed -= value; timerElapsed -= value; } } public double Interval { get { return t.Interval; } set { t.Interval = value; } } public void Start() { t.Start(); } public void Stop() { t.Stop(); } public void RaiseElapsed() { if (timerElapsed != null) timerElapsed(null, null); } } 

我用AddHandler在VB.NET中实现

 Public Class clsMain Inherits ServiceBase Protected Overrides Sub OnStart(ByVal args() As String) ' Add code here to start your service. This method should set things ' in motion so your service can do its work. gTimer.Interval = 1000 gTimer.Enabled = True AddHandler gTimer.Elapsed, AddressOf gTimer_Elapsed End Sub 'When the timer is elapsed this event will be fired Protected Sub gtimer_Elapsed(ByVal source As Object, ByVal e As ElapsedEventArgs) 'Stop the timer and do some work gTimer.Stop() 'Custom code 'Here 'Start to raise the elapsed event again gTimer.Start() End Sub End Class 

Task.Run(() => { Timer_Elapsed(null, null); });

定时器创build/configuration后,工作正常我…