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点,我就开始了我的代表
另外,我是否正确设置了我的代表?
谢谢
您可以使用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)