.Net中使用事件和委托实现Observer模式(二)

来源:互联网 发布:windows安装snmp服务 编辑:程序博客网 时间:2024/05/16 00:36

上一部分简要说明了Observer模式的原理和.Net中的事件处理机制,接下来看看具体应用的实现。 

一个简单的应用场景:网络连接状态监控,用户界面根据网络连接状态变化,显示是否连接图标,并且同时显示已连接/未连接的文字提示。 

具体步骤如下:

1. 首先确定主体和观察者。

创建两个类分别为:NetworkStatus 和 FormMonitor,其中前者为主体,后者为观察者,这里我们直接使用.Net的窗体类继承。

    

2. 主体类中声明网络连接变化事件。

在NetworkStatus类中声明名为NetworkLinkedChanged事件,当然声明事件前,还需要声明该事件的委托类型NetworkLinkedChangedHandler。额外的,若需要传递一些状态信息,比如目前例子中,需要将是否连接的状态及连接提示文本传递给FormMonitor,则还需要定义特定的事件参数类NetworkLinkedEventArgs。然后需要在Linked属性中,检测到值发生变化时触发事件。

 

3.观察者类中声明一个符合NetworkLinkedChanged事件委托签名的方法,作为NetworkLinkedChanged事件的处理方法,并创建一个NetworkLinkedChangedHandler类型的委托实例。然后,在观察者类的构造函数中向主体的NetworkLinkedChanged事件注册委托实例,并在析构函数中注销该委托实例。

 

4.最后,在其他类中仅需直接修改NetworkStatus实例中的Linked属性即可。比如:可启动一个监控线程,定期的调用检查网络连接的方法,如果发现有变化,修改NetworkStatus实例的属性。若涉及后台线程调用事件处理方法中遇到需修改界面控件信息或状态时,应注意使用Form.BeginInvoke()等方法来避免跨线程调用时遇到的问题,有关此问题不在本文中讨论范围。

原创粉丝点击