我有一个小时运行的方法。我目前正在这样做:
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点我的代表开始
另外,我是否正确设置了我的代表?
由于
答案 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();