EventArgs是包含事件数据的类的基类,用于传递事件的细节。今天分享的是使用泛型来约束EventArgs,在事件里传递自定义数据的例子。

正题

由于这个关注点很小,直接上代码了。

定义泛型类TEventArgs:

 public class TEventArgs<T> : EventArgs
{
public TEventArgs(T t)
{
Data = t;
} public T Data { get; set; }
}

定义数据传输类:

/// <summary>
/// 工业相机OCR识别条码事件数据传输对象
/// </summary>
public class ScanDataDto
{
/// <summary>
/// 编码
/// </summary>
public string Code { get; set; }
/// <summary>
/// 数据来源,设备键值
/// </summary>
public string PortKey { get; set; }
/// <summary>
/// 扫描时间
/// </summary>
public DateTime ScanDateTime { get; set; }
}

定义自定义事件:

        /// <summary>
/// 相机识别成功条码数据的事件
/// </summary>
public event Action<TEventArgs<ScanDataDto>> ScanDataReceiving;

订阅事件之后,获取数据传输对象的值:

杂谈

今天又看了腾讯公开课,软谋教育“C#、.net架构师设计模式特训”。今天是看已经学过的观察者模式里面事件和委托的运用。

关于事件和委托,博客园波哥2010大白话系列之C#委托与事件讲解(序言)比较好懂,建议看看。这次Eleven老师又扩展了新的知识点。想到受益良多,不仅感慨,学了老师课程半年多了。但是一直没有好好把学到的知识运用到架构工作中去,深感遗憾。在这里帮老师打个广告吧。老师的课程真的不错,需要进阶的童鞋们请多关注。这里附上课程的链接:软谋教育“C#、.net架构师设计模式特训”因为工作还是比较忙没打算参加老师的VIP课程。主要还是以为架构师是养成的,呵呵。当有了架构设计能力,工作中BOSS还要看到你搭建的架构有亮点,有代替原有框架的价值才会给架构师这个职位。目前公司的首席架构师离开几年之后,后来者再也超越不了他。所以老架构就沿用了近十年。想做架构师很久了,现在看这个目标还需要继续努力,希望早一点把自己的很多想法融合到自己的框架当中。

C#在自定义事件里传递自定义数据,使用EventArgs的姿势的更多相关文章

  1. 【C#】往按钮事件中传递自定义参数

    情景:代码动态生成的按钮,需要自定义点击事件.但是生成的点击事件的参数是固定的,如何才能传入自定义的参数? Button btn = new Button() { Content = "这是 ...

  2. 如何在element-UI 组件的change事件中传递自定义参数

    以select为例,如果select写在循环里,触发change事件时可能不只需要传递被选中项的值,还要传递index过去,来改变同一循环中的其他标签的状态. 下面这样写是无效的: @change=& ...

  3. element-ui组件中的input等的change事件中传递自定义参数

    以select为例,如果select写在循环里,触发change事件时可能不只需要传递被选中项的值,还要传递index过去,来改变同一循环中的其他标签的状态. 下面这样写是无效的: @change=& ...

  4. Vue自定义事件:触发自定义事件

    一 项目结构 二 子组件(Mongo.vue) <template> <button @click="eat">按钮</button> < ...

  5. 由自定义事件到vue数据响应

    前言 除了大家经常提到的自定义事件之外,浏览器本身也支持我们自定义事件,我们常说的自定义事件一般用于项目中的一些通知机制.最近正好看到了这部分,就一起看了下自定义事件不同的实现,以及vue数据响应的基 ...

  6. vue2自定义事件之$emit

    父组件: API上的解释不多: https://cn.vuejs.org/v2/api/#vm-emit vm.$emit( event, […args] ) 参数: {string} event [ ...

  7. javascript和jquey的自定义事件小结

    “通过事件机制,可以将类设计为独立的模块,通过事件对外通信,提高了程序的开发效率.” 可以把多个关联但逻辑复杂的操作利用自定义事件的机制灵活地控制好 对象之间通过直接方法调用来交互 1)对象A直接调用 ...

  8. Qt 学习之路:自定义事件

    尽管 Qt 已经提供了很多事件,但对于更加千变万化的需求来说,有限的事件都是不够的.例如,我要支持一种新的设备,这个设备提供一种崭新的交互方式,那么,这种事件如何处理呢?所以,允许创建自己的事件 类型 ...

  9. mui.fire()触发自定义事件

    导读:添加自定义事件监听操作和标准js事件监听类似,可直接通过window对象添加,通过mui.fire()方法可触发目标窗口的自定义事件. 监听自定义事件 添加自定义事件监听操作和标准js事件监听类 ...

随机推荐

  1. ajax 轮询 和 php长连接

     只看加粗的字体 js   部分       1:  ajax 成功回调函数中 一定要用时间函数间隔调用  get_comment(). get_comments('init'); function ...

  2. 数据库中WITH CHECK OPTION的用法

      WITH CHECK OPTION:透过视图进行增删改操作时,不得破坏视图定义中的谓词条件(即子查询中的条件表达式)   例如:   create view TestView   as selec ...

  3. SQL2005清空删除日志

    代码如下: Backup Log DNName with no_log  '这里的DNName是你要收缩的数据库名,自己注意修改下面的数据库名,我就不再注释了.godump transaction D ...

  4. RabbitMQ 默认端口号

    4369 (epmd), 25672 (Erlang distribution) 5672, 5671 (AMQP 0-9-1 without and with TLS) 15672 (if mana ...

  5. 使用Identity Server 4建立Authorization Server (1)

    预备知识: http://www.cnblogs.com/cgzl/p/7746496.html 本文内容基本完全来自于Identity Server 4官方文档: https://identitys ...

  6. [Bayesian] “我是bayesian我怕谁”系列 - Markov and Hidden Markov Models

    循序渐进的学习步骤是: Markov Chain --> Hidden Markov Chain --> Kalman Filter --> Particle Filter Mark ...

  7. Linux中包管理与定时任务

    第1章 软件查询 1.1 查询软件是否安装 rpm -qa |grep cron 查询是否安装了这个软件. [root@znix ~]# rpm -qa |grep cron crontabs-1.1 ...

  8. 用正则表达式(regex)匹配多项式(polynomial)

    因为作业的要求,我需要识别用户从命令行输入的多项式,并且要提取出其中的系数.指数以便用于后续计算. 曾经想过用一个数组把用户所有的输入全部存进来,然后在写逻辑判断.但想想那复杂的逻辑,头皮都发麻,这时 ...

  9. 模拟制作网易云音乐(AudioContext)

    记得好早前在慕课网上看到一款可视化音乐播放器,当前是觉得很是神奇,还能这么玩.由于当时刚刚转行不久,好多东西看得稀里糊涂不明白,于是趁着现在有时间又重新梳理了一遍,然后参照官网的API模拟做了一款网易 ...

  10. eclipse构建maven+scala+spark工程

    前提条件 下载安装Scala IDE build of Eclipse SDK 构建工程 1.新建maven工程 2.配置项目信息 3.新建scala对应的Source Folder 4.添加scal ...