首页
学习
活动
专区
圈层
工具
发布

学习|C#的EventHandler的委托使用

本文长度为3661字,预计阅读10分钟 前言 上一篇发了一个视频,关于车辆通过系统的场景模拟,在这个项目中,主要想介绍一下使用中距离的读卡器对车辆上的RFID卡进行身份识别,其中读卡这块的核心就是用到了EventHandler...的委托和线程的处理,看了一下原来的C#文章中,以前没有介绍过EventHandler的委托,所以这篇简单先介绍一下这个,后面的文章会结合EventHandler的委托和线程做一个模拟当时环境小Demo。...EventHandler简介 微卡智享 EventHandler就是一个事件处理器,将一个事件与处理事件的方法联系起来的一种机制。...EventHandler使用 # 说明 1 声明一个EventArgs的子类,传递参数 2 声明委托对象,执行方法,将方法绑定委托对象 3 开启EventHandler的委托 EventHandler.../// 接收线程 /// private void ReadThreadRun() { while

2.6K10

正确调用事件处理程序

不管是刚接触 C# 还是已经具有多年开发经验的大部分人会觉得事件处理很简单,只需要把事件定义好然后在需要的时候出发它就可以了。其实这种想法是错误的,这里面有很多需要注意的问题。...public class EventDemo { private EventHandler demo; public void DemoEvent() {...demo(this); } } 上面的代码中存在一个严重的问题,当在对象上触发 demo 事件时并没有关联的事件处理程序的话,C# 将会用 null 值来表示没有处理程序与该事件相关联,进而将会引发...NullReferenceException 异常。...于是在 C# 6.0 中微软为我们增加了 null 条件运算符(?.)。null 条件运算符可以安全的调用事件处理程序并且使代码清晰明了还简单。

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    使用null条件运算符调用事件处理程序

    针对上面这两个问题,在 C# 6.0 中新增的 null 条件运算符就可以解决这个问题。下面我们先来看一下简单的代码段。...//不安全的方式 public class EnventSource { private int count; private EventHandler Updated;...count++; Updated(this,count); } } 上面的代码中存在一个问题,如果对象触发 Updated事件时并没有相关的事件处理程序和它关联,这时就会出现 NullReferenceException...Updated(this,count) 语句时 B 线程将事件处理程序的订阅解除了,那么在 A 线程执行到 Updated(this,count) 语句时事件处理程序已经为 null 了,这样仍然会出现 NullReferenceException...但是这里又有需要注意的地方,因为 C# 不允许在 ?.

    73220

    【C# 基础精讲】循环语句:for、while、do-while

    循环语句是C#编程中用于重复执行一段代码块的关键结构。C#支持for、while和do-while三种常见的循环语句,它们允许根据条件来控制代码块的重复执行。...while循环 while循环用于在给定条件为真(true)的情况下,重复执行代码块。...do-while循环保证循环体至少会执行一次。...总结 循环语句是C#编程中非常重要的控制结构,它们允许根据条件来重复执行一段代码块。for、while和do-while是最常见的循环语句,每种循环语句在不同场景下有其特定的应用。...通过合理使用循环语句,我们可以编写出更加灵活和高效的C#程序。希望本文对您理解C#中的循环语句有所帮助,祝您在C#编程的学习过程中取得更多进展!

    72520

    Emgucv视频操作--进阶1

    //C#特性,为提高运行效率,自动会释放已使用过且不再需要使用的组件来减少程序的CPU使用率。 //默认会在程序运行一段时间后自动加载该Dispose方法,或者可以显式的自行调用此方法。...//C#特性,为提高运行效率,自动会释放已使用过且不再需要使用的组件来减少程序的CPU使用率。 //默认会在程序运行一段时间后自动加载该Dispose方法,或者可以显式的自行调用此方法。..._capture.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.Fps);//帧率 } catch (NullReferenceException...//C#特性,为提高运行效率,自动会释放已使用过且不再需要使用的组件来减少程序的CPU使用率。 //默认会在程序运行一段时间后自动加载该Dispose方法,或者可以显式的自行调用此方法。...capture.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.Fps);//帧率 Application.Idle += new EventHandler

    1.5K20

    C#知识点讲解之C#delegate、event、Action、EventHandler的使用和区别

    今天来讲一讲《C#delegate、event、Action、EventHandler的使用和区别》 小故事讲解这四位的前世今生 曾经.Net大佬只有一个Delegete(委托),别人想用委托的时候,...所以,EventHandler应运而生 它的出生就是为了避免这种重复性工作,并建议尽量使用该类型作为事件的原型。...//这是它的定义 //@sender: 引发事件的对象 //@e: 传递的参数 public delegate void EventHandler(object sender, EventArgs e)...; //使用 public event EventHandler m_event; //修改自定义委托类型为EventHandler 这时候老大哥delegate说了,你event都有小弟了,我也要有...public event EventHandler m_EventHandle; //Action public Action m_action

    10.1K40

    C# 可为空引用类型

    我对 C# 钟爱有加,我认为它严谨的语言设计非常棒。尽管如此,就目前而言,即使在 C# 版本 7 发布后,此语言也仍称不上完美。...导致可为空引用类型不尽理想的一些原因在于: 对空值调用成员会导致 System.NullReferenceException 异常抛出,导致生产代码抛出 System.NullReferenceException...我已经说过,尽管如此,我也仍钟爱 C#,所以我直接将可为空行为看作是 C# 的特性接受了。不过,在 C# 8.0 中,C# 语言团队正开始着手改进此问题。...减少 NullReferenceException 抛出:降低 NullReferenceException 异常抛出的可能性,具体是通过改进静态流分析,标记出可能存在问题的情况,即调用值成员之一前未显式检查值是否为空...久而久之,更新后的可为空代码和旧代码之间的阻抗不匹配将会消失,同时减少了过去常常出现的 NullReferenceException bug。

    64820

    C#开发人员应该知道的13件事情

    public event EventHandler SomethingHappened; private void OnSomethingHappened() { // The event is null...// Create our own copy of the event to protect against another thread removing our subscribers EventHandler...如果你尝试访问一个空引用,以为它是一个对象的有效引用一样 - 例如,通过访问一个属性或方法,运行时将抛出一NullReferenceException异常。...静态和动态分析工具可以帮助你在发布代码之前识别潜在的NullReferenceException异常。在C#中,空引用通常由尚未引用对象的变量引起。对于空值类型和引用类型来说,Null是一个有效值。...以上就是所有C#开发人员应该知道的13件事情。 了解了C#开发中应该知道的13件事情,有助于我们更好地使用C#进行开发,当然在开发时,也可以借助一些使用C#编写的开发工具。

    2.5K90

    NullReferenceException,就不应该存在!

    NullReferenceException,就不应该存在!...它让这么多人印象深刻,是因为它在项目中实在是太常见了,常见到每一个 C#/.NET 入门者必然会遇到。 然而,这个异常本不应该存在!...---- NullReferenceException 的可恨之处 你说 NullReferenceException 可以告诉你程序中某个字段为 null,告诉你程序发生了 BUG。...NullReferenceException 的替代方案 既然 NullReferenceException 没能给我们提供足够的信息,那么我们就自己来提供这些信息。...C# 8.0 极有可能为我们带来“可空引用类型”或者“非空引用类型”;如果真的带来了,这将比 JetBrains.Annotations 拥有更大的强制性,帮助我们避免出现意外的 null 引用,帮助我们在可能为

    1.3K10

    基础:C# try catch finally异常处理(Exception)

    本文主要介绍C# try catch finally异常处理(Exception)。...1、C# Exceptions 执行C# 代码时,可能会发生不同的错误异常:程序员编写的编码错误,由于输入错误引起的错误或其他不可预见的情况。 发生错误时,C# 通常会停止并生成错误消息。...技术术语是:C# 将引发异常(引发错误)。 2、C# try catch try语句允许定义要执行的错误代码块。 如果在try块中发生错误,则catch语句允许定义要执行的代码块。...MissingMemberException 访问一个无效版本的DLL NotFiniteNumberException 对象不是一个有效的成员 NotSupportedException 调用的方法在类中没有实现 NullReferenceException...NullReferenceException 当一个空对象被引用时运行时引发。 InvalidOperationException 当对方法的调用对对象的当前状态无效时,由某些方法引发。

    44510

    C# 一分钟浅谈:循环结构 for 和 while 的应用

    在 C# 中,for 循环和 while 循环是最常用的两种循环结构。它们允许程序重复执行某段代码,直到满足特定条件为止。本文将详细介绍这两种循环结构的使用方法,并探讨一些常见的问题及其解决方法。... 循环 while 循环是一种基于条件的循环结构,适用于未知循环次数的情况。...(i <= 10) { Console.WriteLine(i); i++; } } } do-while 循环 do-while...static void Main() { int n = 10; FibonacciWhile(n); } } 总结 通过本文的介绍,你已经掌握了 C#...while 循环:适用于未知循环次数的情况,如条件判断或无限循环。 do-while 循环:适用于至少执行一次循环体的情况。 继续深入学习 C# 的其他知识点,你将能够更加熟练地使用这门语言进行开发。

    17910

    C# 自定义异常:提升代码健壮性与可维护性

    C# 作为一门面向对象的编程语言,提供了丰富的内置异常类,如 ArgumentException、NullReferenceException 等。...二、C# 异常处理基础回顾 在深入探讨自定义异常之前,先简单回顾一下 C# 异常处理的基本概念和语法。 2.1 异常处理结构 C# 中使用 try-catch-finally 块来处理异常。...System.NullReferenceException:当尝试访问空对象的成员时抛出。 System.IndexOutOfRangeException:当使用的数组索引超出数组边界时抛出。...三、自定义异常的创建与使用 3.1 创建自定义异常类 在 C# 中创建自定义异常类非常简单,只需继承 System.Exception 类或其子类,并提供适当的构造函数。...五、总结 自定义异常是 C# 中一项强大的功能,它可以帮助开发者更好地处理业务逻辑中的异常情况。通过创建自定义异常类,我们可以提供更具描述性的错误信息,提高代码的可读性、可维护性和可扩展性。

    12400
    交个朋友
    加入HAI高性能应用服务器交流群
    探索HAI应用新境界 共享实践心得
    加入腾讯云技术交流站
    洞悉AI新动向 Get大咖技术交流群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券
      首页
      学习
      活动
      专区
      圈层
      工具
      MCP广场