其中 是 Timer.Elapsed 属性



我已经包含了System.Timers包,但是当我输入:

Timer.Elapsed; //its not working, the property elapsed is just not there.

我记得它在 VB.NET 年就在那里。为什么这不起作用?

它不是一个属性。这是一个事件。

因此,您必须提供一个事件处理程序,该处理程序将在计时器滴答作响时执行。像这样:

public void CreateTimer() 
{
    var timer = new System.Timers.Timer(1000); // fire every 1 second
    timer.Elapsed += HandleTimerElapsed;
}
public void HandleTimerElapsed(object sender, ElapsedEventArgs e)
{
    // do whatever it is that you need to do on a timer
}

微软的例子。http://msdn.microsoft.com/en-us/library/system.timers.timer.elapsed.aspx

已用是一个事件,因此需要一个事件处理程序。

using System;
using System.Timers;
public class Timer1
{
private static System.Timers.Timer aTimer;
public static void Main()
{       
    // Create a timer with a ten second interval.
    aTimer = new System.Timers.Timer(10000);
    // Hook up the Elapsed event for the timer.
    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
    // Set the Interval to 2 seconds (2000 milliseconds).
    aTimer.Interval = 2000;
    aTimer.Enabled = true;
    Console.WriteLine("Press the Enter key to exit the program.");
    Console.ReadLine();       
}
// Specify what you want to happen when the Elapsed event is  
// raised. 
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
    Console.WriteLine("The Elapsed event was raised at {0}", e.SignalTime);
}
}
/* This code example produces output similar to the following:
Press the Enter key to exit the program.
The Elapsed event was raised at 5/20/2007 8:42:27 PM
The Elapsed event was raised at 5/20/2007 8:42:29 PM
The Elapsed event was raised at 5/20/2007 8:42:31 PM
...
 */

这里以前的答案都是正确的,但是现在有了 .net 6/VS2022,关于可空性是一件大事,以上所有答案都会抛出编译器警告 CS8622。

您的解决方案会因应用程序而异,但安全的 catch all 解决方案是简单地在回调函数的参数中将源对象标记为可为空,如下所示:

...
    var timer = new System.Timers.Timer(2000); // every 2000ms
    timer.Elapsed += TimerElapsedHandler;
...
public void TimerElapsedHandler(object? source, ElapsedEventArgs e)
{
    //Your Handling Code Here
}

然后,如果您出于任何原因需要访问"source",请务必先检查它是否为空。

您需要

一个事件处理程序,然后在分配事件处理程序并在处理程序中停止时启用一个条件

 Timer = new System.Timers.Timer();
 Timer.Elapsed += new System.Timers.ElapsedEventHandler(PageLoaded);
 Timer.Interval = 3000;
 Timer.Enabled = true;

...................

 public void PageLoaded(object source, System.Timers.ElapsedEventArgs e)
        {
            // Do what ever here
            if (StopCondition)Timer.Enabled = false;
          
           
        }

最新更新