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中的高级知识点.每个知识点不太会过于详细,但 ...
随机推荐
- android tips—开机引导启动wifi设置
在开机引导(Setupwizard,Guide)中都有关于wifi设置项,我得做法例如以下: Intent intent = new Intent(); intent.setClassName(&qu ...
- 【30.00%】【vijos 1909】寻找道路
描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到 终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在满足条件 1 的情 ...
- expdp备份速度慢的问题
--出口分析 --两个时间报表分析,该声明仅出口4,059,292 数据,10之后分钟数据没有继续出口 Snap Id Snap Time Sessions Curs ...
- Mac下cocos2dx3.1用Cocos IDE写的Lua binding篇01
本人Lua新手,写着玩玩. 新建一个模版project. 一.改动main.lua require "Cocos2d" require "Cocos2dConstants ...
- Java并发编程:synchronized和Lock
转自 : http://www.tuicool.com/articles/qYFzUjf
- 绝对和相对误差(absolute & relative error)
1. 标量 真实值为 x,测量值为 x0, 绝对误差(absolute error):Δx=x0−x(有单位): 相对误差(relative error):δx=Δxx=x0−xx=x0x−1(是一个 ...
- WPF中使用Hashtable剔除重复字符串(比如电话号码)
原文:WPF中使用Hashtable剔除重复字符串(比如电话号码) 本文中的输入框中的字符串是逗号隔开的,你可以换成其他特别的字符串.本篇中的亮点:1. 里面有一个玻璃样式按钮,用XAML制作2. W ...
- leetcode先刷_Pascal's Triangle II
三角相对简答题.第一个问题是太简单.我不沾了,我一定会写.其实没什么的第二个问题,与这个问题计算路径有点像一个三角形,假定输入是n,然后从第一行计数到第一n行,保存在数据线上的时间到,由于只有相关的事 ...
- XP双网卡不能上网的问题
转载. 现在很多本本都是双网卡配置,让两个网卡分别负责连接内外网能够加快上网速度和连接稳定,但不少网友照做后会出现无法上网的情况,这是由于默认网关冲突所导致的.那么该如何处理让双网卡各行其是,互不干扰 ...
- 用MVVM模式开发中遇到的零散问题总结(4)——自制摄像头拍摄大头贴控件
原文:用MVVM模式开发中遇到的零散问题总结(4)--自制摄像头拍摄大头贴控件 一直有个疑问,为什么silverlight对摄像头支持这么好,WPF却一个库都没有....于是我各种苦恼啊,各种Code ...