[英]c# timer.elapsed?
I have included the System.Timers
package, but when I type:我已经包含了System.Timers
包,但是当我输入:
Timer.Elapsed; //its not working, the property elapsed is just not there.
I remember it was there in VB.NET.我记得它在 VB.NET 中。 Why doesn't this work?为什么这不起作用?
It's not a property.它不是财产。 It's an event . 这是一个事件。
So you gotta provide an event handler that will execute every time the timer ticks.因此,您必须提供一个事件处理程序,该处理程序将在每次计时器滴答时执行。 Something like this:像这样的东西:
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
}
Microsofts example.微软的例子。 http://msdn.microsoft.com/en-us/library/system.timers.timer.elapsed.aspx http://msdn.microsoft.com/en-us/library/system.timers.timer.elapsed.aspx
Elapsed is an event and therefore requires an eventhandler. Elapsed 是一个事件,因此需要一个事件处理程序。
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
...
*/
The previous answers here are all correct, however with .net 6 / VS2022 now out and about nullability is big deal, and all the above answers will throw compiler warning CS8622.这里之前的答案都是正确的,但是现在 .net 6 / VS2022 已经发布并且关于可空性很重要,并且所有上述答案都会引发编译器警告 CS8622。
The solution to this is to simply mark the source object as nullable in your callback function's parameters, like such:解决方案是在回调函数的参数中简单地将源对象标记为可为空,如下所示:
...
var timer = new System.Timers.Timer(2000); // every 2000ms
timer.Elapsed += TimerElapsedHandler;
...
public void TimerElapsedHandler(object? source, ElapsedEventArgs e)
{
//Your Handling Code Here
}
You need an event handler, then after Enabling while assigning event handler and stop in your handler a condition您需要一个事件处理程序,然后在分配事件处理程序时启用并在您的处理程序中停止一个条件
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.