观察者模式
由于项目需要,用到了简单的观察者模式,项目中要求主窗口收到消息后,将消息派送出去,然后订阅了消息的窗口接受到消息,如下图所示。

代码实现:
1.新建一个中间类Watcher
/// <summary> /// 定义发布消息的委托 /// </summary> /// <param name="sender">发布者</param> /// <param name="msg">消息</param> public delegate void OnSend(object sender, string msg); public class Watcher { /// <summary> /// 消息发布的事件 /// </summary> public static event OnSend messageChange; public static void SendMessage(object sender, string msg) { if (messageChange != null) { messageChange(sender, msg); } } }
2.主窗口接收到消息后派发消息
protected override void DefWndProc(ref System.Windows.Forms.Message m) { switch (m.Msg) { case 0x004A: // 将返回信息发送给所有能接收CAD消息的窗口 Watcher.SendMessage(this, mystr.lpData); break; default: base.DefWndProc(ref m); break; } }
3.在接收窗口订阅消息和接收消息
public ImportTrainControlData() { InitializeComponent(); // 订阅消息 Watcher.messageChange += new OnSend(ReciveMessage); } /// <summary> /// 接收消息 /// </summary> /// <param name="sender"></param> /// <param name="msg">消息内容</param> void ReciveMessage(object sender, string msg) { // frmMain 为主窗口 frmMain _frmMain = sender as frmMain; if (_frmMain != null) { var keyCode = JsonHelper.GetKeyCode(msg); if (keyCode == "LoadDisplayDataTable") { var info = ObjectFactory.GetService<ICADAPI>().getDisplayDataTable(msg); BindData(info); } } }

浙公网安备 33010602011771号