注册计时器已过去的事件

我想创建一个初始化计时器的类,该计时器将用作其他类成员的中心核心,以便为计时器已用事件注册自己。 我的问题是我真的不知道如何将计时器已用事件暴露给其他类。 我认为可能有效的一个解决方案是,我只是将计时器公开为公共属性,它将返回计时器对象,我可以从该对象调用timer elapsed事件,例如:

MyAppTimer appTimer = new MyAppTimer(); Timer timer = appTimer.GetAppTimer; timer.Elapsed += SomeMethod; 

但是通过这个解决方案,我将暴露出我不想要的整个计时器。 如何传入MyAppTimer类中的方法,该方法将在内部使用计时器的已用事件注册该方法? 是否与代表有关? 也许是这样的:

 public void RegisterHandler(someStuffGoesHere) //What do I pass in here? { timer.Elapsed += someStuffGoesHere; } 

您可以使用显式访问者创建事件:

 public event EventHandler TimerElapsed { add { timer.Elapsed += value; } remove { timer.Elapsed -= value; } } 

您的类的客户端可以直接订阅TimerElapsed事件:

 appTimer.TimerElapsed += SomeHandlerMethod; 

如果要使用代码中所示的RegisterHandler方法,则参数的类型应为EventHandler

编辑:请注意,使用此方法,sender参数的值将是Timer对象,而不是MyAppTimer对象。 如果这是一个问题,你可以这样做:

 public MyAppTimer() { ... timer.Elapsed += timer_Elapsed; } private void timer_Elapsed(object sender, EventArgs e) { EventHandler handler = this.TimerElapsed; if (handler != null) handler(this, e); } 

正如其他人所提到的,暴露一个事件可能就是你想要的方式,但是为了回答你关于RegisterHandler方法所需类型的问题,它看起来像:

 using System.Timers; ...snip... public void RegisterHandler(ElapsedEventHandler callback) { timer.Elapsed += callback; } 

您想在课堂上公开一个事件,例如:

 class A { public event EventHandler Elapsed; private void OnElapsed() { if(Elapsed!=null) Elapsed(new EventArgs()); } } 

在OnElapsed私有方法中,您有一个示例如何引发事件。 然后以与使用Timer相同的方式使用A类。