首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c# timer.elapsed?

c# timer.elapsed?
EN

Stack Overflow用户
提问于 2012-10-06 06:34:09
回答 4查看 44.7K关注 0票数 7

我已经包含了System.Timers包,但是当我键入以下内容时:

代码语言:javascript
复制
Timer.Elapsed; //its not working, the property elapsed is just not there.

我记得它就在VB.NET里,为什么这个不起作用呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-06 06:36:47

这不是一处房产。It's an event

因此,您必须提供一个事件处理程序,该处理程序将在每次计时器滴答作响时执行。如下所示:

代码语言:javascript
复制
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
}
票数 35
EN

Stack Overflow用户

发布于 2012-10-06 06:37:26

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

Elapsed是一个事件,因此需要一个eventhandler。

代码语言:javascript
复制
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
...
 */
票数 6
EN

Stack Overflow用户

发布于 2022-01-06 14:42:44

前面的答案都是正确的,但是随着.net 6/ VS2022的发布,空性是个大问题,所有上面的答案都会抛出编译器警告CS8622。

解决这个问题的方法是在回调函数的参数中将源对象标记为可空,如下所示:

代码语言:javascript
复制
...
    timer.Elapsed += TimerElapsedHandler;
...

public void TimerElapsedHandler(object? source, ElapsedEventArgs e)
{
    //Your Handling Code Here
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12754898

复制
相关文章

相似问题

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