C#委托和事件 EventHandle和EventArgs
一、背景
由于对于C#委托和事件理解的不够透彻,并且平时工作中对于自己手写委托和事件很少,渐渐的只会增删改查了。特定整理了委托和事件的基本知识。
二、案例
案例引用了张逸 博客 中的案例,并做了处理。
创建一个控制台项目,监测根目录下是否有text.txt文件。
创建一个简单的类,名为FileWatch,包含事件FileWatchevent。该类将检查在执行应用程序的目录(当前
目录,通常是项目名/bin/debug)下,是否存在文件text.txt。如果文件被删除或创建,都将触发事件。
同时提供一个方法MonitorFile以不断地查询该文件。
代码中有注释,看着方便
//定义委托
public delegate void FileWatchEventHandler(object sender, EventArgs e);
/// <summary>
/// 定义FileWatch 类
/// </summary>
public class FileWatch
{
//定义事件
public event FileWatchEventHandler FileWatchevent; /// <summary>
/// 用于检测test.txt 文件状态
/// </summary>
public void MonitorFile()
{
bool isExist = false;
while (true)
{
isExist = File.Exists("test.txt");
MyEventAgrs arg = new MyEventAgrs();
arg.State = isExist ? "存在" : "不存在"; if (FileWatchevent != null)
{
FileWatchevent(this, arg);
} Thread.Sleep();
}
} }
/// <summary>
/// MyEventAgrs ,用户返回文件状态
/// </summary>
public class MyEventAgrs : EventArgs
{
private string _state; public string State
{
get { return this._state; }
set { _state = value; }
}
}
下面是调用方法:
class Program
{
static void Main(string[] args)
{ //实例化
FileWatch fw = new FileWatch(); //注册事件
fw.FileWatchevent += new FileWatchEventHandler(OnFileChange); //另开一个线程,用于检测文件
Thread t = new Thread(fw.MonitorFile);
t.Start(); Thread.Sleep();
var filePath = AppDomain.CurrentDomain.BaseDirectory;
filePath = filePath + "test.txt";
var fileStream = File.Create(filePath);
fileStream.Close();//注意关闭流,否则下面的删除会报错 Thread.Sleep();
File.Delete(filePath); Console.ReadKey();
} private static void OnFileChange(object sender, EventArgs e)
{
MyEventAgrs arg = e as MyEventAgrs;//用于获取文件的状态
Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + arg.State);
}
}
运行结果:

三总结:
1、创建委托:
public delegate void 委托名(object sender, EventArgs e);
2、如果有获取状态,需要创建类,继承EventArgs
3、创建事件:
public event 委托类型 事件名;
4、注册事件,并添加其处理方法
部分引用来自:http://wayfarer.cnblogs.com/archive/2004/04/20/6712.html
C#委托和事件 EventHandle和EventArgs的更多相关文章
- [转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)
原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委 ...
- C# 委托和事件(二):使用.Net框架中的EventArgs和EventHandler
前面一篇里提到事件是通过委托来进行关联的,而委托是可以带各种各样的参数的,其中就可以用事件参数(EventArgs),同时,也可以用.Net框架里边提供的一个委托EventHandler来Handle ...
- 第一章、C#委托和事件(Delegate、Event、EventHandler、EventArgs)
第一章.C#委托和事件(Delegate.Event.EventHandler.EventArgs) 分类: 学习笔记-C#网络编程2012-12-08 14:10 7417人阅读 评论(3) 收藏 ...
- 委托与事件代码详解与(Object sender,EventArgs e)详解
委托与事件代码详解 using System;using System.Collections.Generic;using System.Text; namespace @Delegate //自定义 ...
- .NET面试题系列[7] - 委托与事件
委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...
- .NET基础拾遗(4)委托、事件、反射与特性
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- [转载]C#深入分析委托与事件
原文出处: 作者:风尘浪子 原文链接:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html 同类链接:http://www.c ...
- C#委托与事件
一.在控制台下使用委托和事件 我们都知道,C#中有"接口"这个概念,所谓的"接口"就是定义一套标准,然后由实现类来具体实现其中的方法,所以说"接口,是 ...
- [ASP.NET MVC 大牛之路]02 - C#高级知识点概要(1) - 委托和事件
在ASP.NET MVC 小牛之路系列中,前面用了一篇文章提了一下C#的一些知识点.照此,ASP.NET MVC 大牛之路系列也先给大家普及一下C#.NET中的高级知识点.每个知识点不太会过于详细,但 ...
随机推荐
- vim note (2)
:e edit :edit edit :e. edit current file '.' a dot is means current : w writ ...
- 左右Cwnd::Create()功能出现afxwin1.inl line:21错误的解决方案
我最近在调试dll时刻,有一种模糊的断言错误,它是由主程序创建MFC 扩张DLL控制出口(从控制继承CWnd分类)时刻,呼叫Create()下列说法错误的功能: watermark/2/text/aH ...
- 详解Qt,并举例说明动态编译(shared)和静态编译(static)以及debug and release 编译版本区别(可产生静态版的Debug版本,需要把-release 改为 –debug-and-release)
作为初入Qt学习的新人,花了整整一两天时间,对Qt编译版本等问题进行了一步步探索,首先感谢网站博客中文章,开始也不是很明白一些几个问题: 1.Qt版本问题 作为初学者,可能下载时这么多版本,如何选择呢 ...
- 轻松掌握XMLHttpRequest对象
XmlHttp是什么? 最通用的定义为:XmlHttp是一套可以在Javascript.VbScript.Jscript等脚本语言中通过http协议传送或从接收XML及其他数据的一套API.XmlHt ...
- spring mybatis circular reference
摘要: Error creating bean with name 'XXX': Requested bean is currently in creation: Is there an unreso ...
- 学习Hadoop和Spark的好的资源
1. 官网http://spark.apache.org 有各种资源链接: 2. 总结得很好的个人博客[从零开始学Hadoop系列]1)初识http://blog.csdn.net/u01016816 ...
- Methods and Systems for Enhancing Hardware Transactions Using Hardware Transactions in Software Slow-Path
Hybrid transaction memory systems and accompanying methods. A transaction to be executed is received ...
- WCF寄宿与IIS里时遇到的问题
[问题总结]WCF寄宿与IIS里时遇到的问题 最近在公司做了一个小的视频处理网站,由于视频处理,网站在不同的服务器上,所以处理视频的时候得在网站服务器上通过wcf请求视频处理服务器处理视频,并将结果返 ...
- SSH深度历险记(九) Struts2+DWZ+Uploadify多文件(文件和图片等。)上传
在gxpt_uas系统,为了实现文件(文件和图片等.,灵活配置)批量上传到mongodb,在学习的过程中,知道mongodb,功能,实现思路:在DWZ的基础上參考官方的实例结合现有的GXPT来实现,期 ...
- linux下一个C语言要求CPU采用
部分 从灾难中 本来我想写一个小程序来测试CPU其他工具利用它可以检验类数据的性能.以后参考IPbench中间cpu_target_lukem插件实现我们的功能.原理非常简单:就是我们给程序设置了 ...