C# - 使用委托每小时同时运行一个方法

JMK*_*JMK 3 c# events delegates

可能重复:
在给定的时间间隔内运行代码

我有一个小时运行的方法.我目前正在这样做:

while (true)
{
        string rightNow = DateTime.Now.ToString("mm");

        if (rightNow == "00")
        {
            RunMyMethod();
        }
        Thread.Sleep(10000);
}
Run Code Online (Sandbox Code Playgroud)

我被朋友可靠地告知我,我是一个白痴(通常是一个坏人),我应该使用事件和代表来做这件事.我知道,在任何方法的范围之外,我需要声明一个与我的方法具有相同返回类型的委托,并使用相同的输入参数,如下所示:

public delegate void MyMethodsDelegate();
Run Code Online (Sandbox Code Playgroud)

然后,当我想使用我的委托时,我以同样的方式实例化它,就像我这样实例化一个类:

MyMethodsDelegate foobar = new MyMethodsDelegate(RunMyMethod);
Run Code Online (Sandbox Code Playgroud)

然后我可以像这样调用我的代理:

foobar.Invoke();
Run Code Online (Sandbox Code Playgroud)

好的,我有我的代表设置,事件怎么样?我要创建的事件是'它是下午4点',然后每次都是x点,我就开始了我的代表

另外,我是否正确设置了我的代表?

谢谢

sll*_*sll 9

您可以使用System.Timers.Timer类来异步执行委托,并在经过给定的时间间隔时引发Elapsed事件.我强烈建议您阅读Timer类的MSDN备注部分,请参阅此处.

System.Timers.Timer timer = new Timer(60 * 60 * 100);
Run Code Online (Sandbox Code Playgroud)

案例1:订阅匿名方法

timer.Elapsed += (s, e) =>
    {
        // callback code here
    };
Run Code Online (Sandbox Code Playgroud)

案例2:订阅明确定义的委托

ElapsedEventHandler handler = (s, e) =>
    {
        // callback code here
    };
timer.Elapsed += handler;
Run Code Online (Sandbox Code Playgroud)

案例3:订阅现有方法

timer.Elapsed += this.OnHourElapsed;
private void OnHourElapsed(object sender, EventArgs args)
{
    // callback code here
}
Run Code Online (Sandbox Code Playgroud)

然后最后才开始计时器

timer.Start();
Run Code Online (Sandbox Code Playgroud)