C#小结: 通信 观察者模式 ,事件使用

观察者模式: 是通信模式里面的一种, 当被观察者发生变化时, 可以通知一组观察者,从而每个观察者可以同时响应.

为了让这组观察者都可以响应,因此引入了观察者的接口IObserver,这样每个观察者虽然彼此不同,但是都可以从此接口派生,并进而响应。

由此也可以初窥接口的这个强大功能。

 

事件:C#编程的一个原则就是UI和数据处理模块尽量分开,那么当我数据发生变化,然后也需要UI界面发生对应的变化怎么办呢?一个比较好的处理方式就是使用事件。

 

步骤一:在数据处理单元,定义事件

#regionEvent notify

       ///<summary>

       /// To notifyto write TDSP serial port, to query SID and angle.

       ///</summary>

       public delegatevoid EventDelegate();

       public eventEventDelegate NotifyTDSP;

       

       ///<summary>

       /// To notifylabDAP control to change its text to DAP value.

       ///</summary>

       ///<param name="dapValue"></param>

       public delegatevoid EventLableDAPDelegate(double dapValue);

       public eventEventLableDAPDelegate NotifyLabDAP;

#endregion

由此可见,定义事件有2个特点:

1.      需要使用委托,委托是C#的一个要求,和回调函数差不多,没有什么特别的含义,可以当它就是多穿了一件衣服而已,这样更安全。

2.      定义委托的时候是可以带上参数的,只要和后面订阅时间的时候传入的函数的参数格式保持一致就行。

 

步骤二:在UI界面代码模块,订阅这个事件,可以认为就是告诉UI界面当这个事件发生的时候,该做哪些事情,这个事情都放在函数里面了。

private bool InitIBAComm()

       {          

            ibacomm.SetPort("COM2", 38400, Parity.None,StopBits.One, 8, Handshake.None);

            ibacomm.Open();

            if(ibacomm.IsOpen)

            {

                ibaObserver = new ObserverDoseInfo();

                ibaObserver.NotifyLabDAP += newObserverDoseInfo.EventLableDAPDelegate(UpdateLabDAP);

                ibaObserver.NotifyTDSP += new ObserverDoseInfo.EventDelegate(UpdateFactor);

                ibacomm.Register(ibaObserver);

                ibacomm.WritePortStr("%AD");

                returntrue;

            }

            returnfalse;

            // 如果打开失败呢?         

       }

 

       private voidUpdateLabDAP(double dap)

        {

            this.labDAP.Text= dap.ToString();

        }

 

        privatevoid UpdateFactor()

        {

            if(tdspcomm.IsOpen)

            {

                tdspcomm.QuerySIDAngle();

            }

        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值