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中的高级知识点.每个知识点不太会过于详细,但 ...
随机推荐
- C 删除字符串1字符串2
#include<stdio.h> #include<string.h> void main() { char s1[1000],s2[100],b[100]; int i,j ...
- BZOJ 2818 Gcd 线性欧拉筛(Eratosthenes银幕)
标题效果:定整N(N <= 1e7),乞讨1<=x,y<=N和Gcd(x,y)素数的数(x,y)有多少.. 思考:推,. 建立gcd(x,y) = p,然后,x / p与y / p互 ...
- Vue中import '@...'是什么
今天看新项目代码,有import '@/assets/css/theme/index.css'一类的代码,里面的@是做什么的呢. 找到这篇文章https://www.cnblogs.com/bos ...
- 百度2014 Summer Party视频集锦
博客已经迁移到reetsee.com,在百度或其他搜索引擎搜"吹水小镇"就能够了.要看原版的博客请到:blog.reetsee.com 转载请注明: 吹水小镇 | reetsee. ...
- 使用带ParserContext参数的Xaml.Load方法
原文:使用带ParserContext参数的Xaml.Load方法 如果一段XAML中存在一个标记需要从外部命名空间中解析, 就需要用到ParserContext类, 具体用法如下: Normal ...
- 获取当前电脑的cpu使用率、内存使用率
https://www.cnblogs.com/Chary/p/7771365.html http://www.cnblogs.com/zl1991/p/4679461.html 要关注几个类 Per ...
- 深入WPF中的图像画刷(ImageBrush)之1——ImageBrush使用举例
原文:深入WPF中的图像画刷(ImageBrush)之1--ImageBrush使用举例 昨天我在<简述WPF中的画刷(Brush) >中简要介绍了WPF中的画刷的使用.现在接着深入研究 ...
- uboot初体验-----趣谈nand设备发起的浅显理解
1 选择Uboot版本号 2 移植uboot至console正常work 3 制造uImage和使用uboot指南 4 写NFC驱动器 5 uboot从nand启动引导系统 1 选择Uboot版本号 ...
- zlog 程序日志的库 交叉编译(Linux生成ARM库,观察执行步骤)
1. zlog 是个很好的写程序日志的库,功能比较强大,上手快. 2. 下载地址:https://github.com/bmanojlovic/zlog 3. cd 到文件夹下,对 autogen.s ...
- Emgu-WPF 激光雷达研究-移动物体跟踪
原文:Emgu-WPF 激光雷达研究-移动物体跟踪 接前两篇博客: 激光雷达数据解析并绘制雷达图 https://blog.csdn.net/u013224722/article/details/80 ...