c# EvenHandler只更新一次
本文关键字:一次 EvenHandler 更新 | 更新日期: 2023-09-27 18:16:07
我试图更熟悉事件处理程序,但我的当前甚至只更新一次,我希望它更新,直到我关闭应用程序。
这是我的代码:
private static event EventHandler Updater;
Updater += Program_updater;
Updater.Invoke(null, EventArgs.Empty);
Application.Run();
private static void Program_updater(object sender, EventArgs e)
{
KeyUtils.Update();
Framework.Update();
}
但就像我说的,它只会更新一次,我希望它更新,直到我关闭我的应用程序。我知道我只能做一会儿(真的),但我宁愿不做。
我想你这里需要一个Timer:
Timer aTimer = new System.Timers.Timer(2000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += Program_updater;
// Have the timer fire repeated events (true is the default)
aTimer.AutoReset = true;
// Start the timer
aTimer.Enabled = true;
指定回调函数:
private void Program_updater(Object source, System.Timers.ElapsedEventArgs e)
{
KeyUtils.Update();
Framework.Update();
}
现在每2秒(或指定任何其他间隔)回调OnTimedEvent
将被调用。
事件只触发一次是绝对正常的,因为应用程序只启动一次。你真正需要的是设置一个计时器,并在它的滴答声中做一些工作。请在回答这个问题的例子上看一下使用系统的简单例子。定时器。c#中的定时器
它只更新一次,因为你只调用它一次(我没有真正得到你的代码运行的上下文,因为你都声明了一个静态变量,并在同一范围内调用它,这是不可能的)。
如果你想让某件事周期性地发生,你应该使用Timer
,或者在某些情况下AutoResetEvent
/ManualResetEvent
。
EventHandler
s应该仅在您作为事件驱动工作时使用,这意味着您希望处理程序在发生某些事情时调用
下面是[System.Timers.Timer][2]
的一个例子:
//Invoke every 5 seconds.
Timer timer = new Timer(5000);
//Add your handler to the timer invocation list.
timer.Elapsed += Program_updater;
//Start the timer.
timer.Start();
你还需要Program_update
的签名看起来像这样:
private void Program_updater(object source, ElapsedEventArgs e)