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();
}

但就像我说的,它只会更新一次,我希望它更新,直到我关闭我的应用程序。我知道我只能做一会儿(真的),但我宁愿不做。

c# EvenHandler只更新一次

我想你这里需要一个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)