C#中使用事件机制实现线程间的通信

在图形界面中的运用程序中,通常是主线程负责UI人机交互,而将需要循环执行和耗资源的逻辑代码和复杂的业务实现以及数据交互放到单独一个线程里运行。这样可以保证主线程UI可以正常进行人机交互。
而线程之间的数据交互,就涉及了线程通信。这里将通过一个给MCU升级固件程序的IAP(在应用编程)的一个用C#写的上位机软件的实现原理,来说明如何通过事件的机制来实现线程之间的通信。

关于事件和委托的概念
事件(Event)用于进程间通信。
委托(Delegate)是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。

通过事件使用委托
事件在类中声明且生成,且通过使用同一个或其他类中的委托与事件处理程序关联。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。

发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。
订阅器(subscriber) 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。

                                            线程使用事件通信的基本流程

这里写图片描述

这是实现了线程间的基于事件机制的通信了。当然线程之间的通信出了事件,还有类似信号量,互斥锁,共享内存,消息队列等。而具体是使用哪一种,则是需要根据实际业务需求来选择。

具体代码:
public delegate void —DataHandler(object o,数据类 data);
public event —DataHandler 定义接受方法;

猜你喜欢

转载自blog.csdn.net/qq_38350514/article/details/81558717
今日推荐