您可以使用静态事件:
public static class MyGlobalEvent {
public static event EventHandler MyEvent;
public static void FireMyEvent(EventArgs args)
{
var evt = MyEvent;
if (evt != null)
evt(args);
}
}
Run Code Online (Sandbox Code Playgroud)
以通常的方式订阅:
MyGlobalEvent.MyEvent += args => Console.WriteLine("Event Was Fired.");
Run Code Online (Sandbox Code Playgroud)
你认为合适的火:
MyGlobalEvent.FireMyEvent(new EventArgs());
Run Code Online (Sandbox Code Playgroud)
您描述的内容类似于Mediator模式,其中对象通过消息进行通信.这些消息可以实现为事件,回调或任何其他机制.
您可以使用类似MVVM Light的Messenger类的实现(此框架旨在与WPF和Silverlight一起使用,但您可以获取此特定类的代码并在WinForms中使用它)
// Register for a specific message type
Messenger.Default.Register<TypeOfTheMessage>(this, DoSomething);
...
// Called when someone sends a message of type TypeOfTheMessage
private void DoSomething(TypeOfTheMessage message)
{
// ...
}
// Send a message to all objects registered for this type of message
Messenger.Default.Send(new TypeOfTheMessage(...));
Run Code Online (Sandbox Code Playgroud)
Messenger类相对于静态事件的一大优点是它使用弱引用,因此它不会阻止订阅对象的垃圾收集,从而降低了内存泄漏的风险.
有关课程的详细信息,请参阅此链接Messenger