process.Exited += new EventHandler(CmdProcess_Exited); // 注册进程结束事件 。
EventHandler本来也是委托。比如
public delegate void DataReceivedEventHandler(object sender, DataReceivedEventArgs e);
自定义事件
自定义事件是一种类似于委托的方式,
自定义事件某种意义上改变了程序的流程,使得某个条件的变化由‘不断查询'转变为‘订阅与处理'的关系。
自定义事件需要有以下几个元素:
事件的发起者,事件的订阅,以及事件的处理程序。从发起者到处理程序之间是可以传参数的。
一个事件的‘发起'可以依赖于某种系统消息,比如‘OnKeyDown'、‘OnMouseClick'(【我目前还没见过这么写的源码】),也可以在某个条件达成时(比如两次输入了同样的字符)自行调用(其实收到系统消息也算是‘条件达成')。【更多的event是这么写出来的】
有些事件,并没有明显的‘发起者'。
委托和事件是啥关系
委托和自定义事件的使用方式十分十分类似。event 只有类的内部可以 Invoke,delegate的话,在哪都可以Invoke。调用的方式貌似也略有区别(传参方式)
由于调用方式和传参的差异,event显得更保守/稳定一些。event也更容易从‘理解'上更容易接受。
delegate貌似更多的用于进行异步(begin invoke)。而event则更多的用来做自定义事件。
委托和异步是啥关系
异步是委托可以实现的一种功能(或者叫做‘现象'也可以) 异步可以由很多种其他方式体现,比如多线程(thread,threadpool,task等等)。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持ASPKU!
注:相关教程知识阅读请移步到c#教程频道。










