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

时间:2012-01-27 16:08:47

标签: c# events delegates

  

可能重复:
  Run a code in given time interval

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

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

        if (rightNow == "00")
        {
            RunMyMethod();
        }
        Thread.Sleep(10000);
}

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

public delegate void MyMethodsDelegate();

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

MyMethodsDelegate foobar = new MyMethodsDelegate(RunMyMethod);

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

foobar.Invoke();

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

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

由于

1 个答案:

答案 0 :(得分:9)

您可以使用System.Timers.Timer类异步执行委托,并在给定的时间间隔过后提升Elapsed event。我强烈建议您阅读Timer类see here的MSDN备注部分。

System.Timers.Timer timer = new Timer(60 * 60 * 100);

案例1:订阅匿名方法

timer.Elapsed += (s, e) =>
    {
        // callback code here
    };

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

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

案例3:订阅现有方法

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

然后最后才开始计时器

timer.Start();