托管C++随笔一:触发事件

我们在.net里写代码,会经常通过事件来处理程序流程,比如IO操作完成、失败或遇到一个特殊的数据等等,触发一个事件,然后做相应处理。

那么我们在托管C++里如何实现触发事件呢?

其步骤和.net里写一个事件的步骤差不多是一样的,分以下几步(我拿公司SIP通话的部分代码来讲解):

一,定义一个委托

你可以自定义一个委托,也可以直接使用.net框架为你预定义的专用于事件的委托,我这里自定义了一个委托。

namespace AVWrapper
{
	public enum class SipEventEnum
	{
		// 未注册
		NotLogined,

		// 已注册
		Login,

		// 对方正在处理
		Processing,

		// 对方正在响铃
		Ringning,

		// 对方已接听
		Answered,

		// 通讯关闭
		Closed,

		// 未知
		Unknown
	};

	// SIP 通讯事件
	public delegate void SipEventHandler(System::Object^ sender, SipEventEnum^ args);
}

二,定义事件

我删除了不重要的代码,大家重点看如何定义事件。在下述代码中,我定义了一个函数Fire,用于触发事件。

	public ref class SipWrapper
	{
	public:
		SipWrapper(void);
		~SipWrapper(void);
		!SipWrapper(void);

		// 触发事件
		void Fire(SipEventEnum args);

	public:
		// SIP 通讯状态
		event SipEventHandler^ SipEvent;
	};

三,触发事件

到这里,就简单了,根据程序运行情况,触发相应事件

	void SipWrapper::Fire(SipEventEnum args)
	{
		SipEvent(this, args);
	}

四,应用

经过前面3步,托管C++里的事件就定义好了,也能按你的程序逻辑触发,那么剩下的事,就是别人如何使用你的事件了,写过.net事件处理程序的,这就是小菜一碟了,我写个简单的例子吧

AVWrapper.SipWrapper sip = new AVWrapper.SipWrapper();
sip.SipEvent += new AVWrapper.SipEventHandler(OnSipEvent);


        private void OnSipEvent(object sender, Enum args)
        {
            AVWrapper.SipEventEnum sipEvent = (AVWrapper.SipEventEnum)args;
            // 处理你的程序逻辑
        }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值