一、背景
由于对于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的更多相关文章

  1. [转载]C#委托和事件(Delegate、Event、EventHandler、EventArgs)

    原文链接:http://blog.csdn.net/zwj7612356/article/details/8272520 14.1.委托 当要把方法作为实参传送给其他方法的形参时,形参需要使用委托.委 ...

  2. C# 委托和事件(二):使用.Net框架中的EventArgs和EventHandler

    前面一篇里提到事件是通过委托来进行关联的,而委托是可以带各种各样的参数的,其中就可以用事件参数(EventArgs),同时,也可以用.Net框架里边提供的一个委托EventHandler来Handle ...

  3. 第一章、C#委托和事件(Delegate、Event、EventHandler、EventArgs)

    第一章.C#委托和事件(Delegate.Event.EventHandler.EventArgs) 分类: 学习笔记-C#网络编程2012-12-08 14:10 7417人阅读 评论(3) 收藏  ...

  4. 委托与事件代码详解与(Object sender,EventArgs e)详解

    委托与事件代码详解 using System;using System.Collections.Generic;using System.Text; namespace @Delegate //自定义 ...

  5. .NET面试题系列[7] - 委托与事件

    委托和事件 委托在C#中具有无比重要的地位. C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影.C#中如果没有了事件,那 ...

  6. .NET基础拾遗(4)委托、事件、反射与特性

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  7. [转载]C#深入分析委托与事件

    原文出处: 作者:风尘浪子 原文链接:http://www.cnblogs.com/leslies2/archive/2012/03/22/2389318.html 同类链接:http://www.c ...

  8. C#委托与事件

    一.在控制台下使用委托和事件 我们都知道,C#中有"接口"这个概念,所谓的"接口"就是定义一套标准,然后由实现类来具体实现其中的方法,所以说"接口,是 ...

  9. [ASP.NET MVC 大牛之路]02 - C#高级知识点概要(1) - 委托和事件

    在ASP.NET MVC 小牛之路系列中,前面用了一篇文章提了一下C#的一些知识点.照此,ASP.NET MVC 大牛之路系列也先给大家普及一下C#.NET中的高级知识点.每个知识点不太会过于详细,但 ...

随机推荐

  1. CentOS 挂载iso文件配置yum源

    1.挂载iso 准备好centos的光盘镜像 挂载前的准备; mkdir -p /dev/centos mkdir -p  /mnt/local_yum 挂载 mount -o loop /opt/s ...

  2. 让C#语言充当自身脚本!——.NET中的动态编译

    原文:让C#语言充当自身脚本!--.NET中的动态编译 代码的动态编译并执行是.NET平台提供给我们的很强大的一个工具,用以灵活扩展(当然是面对内部开发人员)复杂而无法估算的逻辑,并通过一些额外的代码 ...

  3. 黑科技 —— Type-C 接口与 USB3.1

    Type-C 接口解决了 USB 永远插不准的世界性难题. 小开科普一分钟:究竟USB Type-C是何方神圣? 1. Type-C USB Type-C,简称是 USB-C.Type-C 只是 US ...

  4. 【从翻译mos文章】采用高速全扫描索引(index ffs) 为了避免全表扫描

    采用高速全扫描索引(index ffs) 为了避免全表扫描 参考原始: Index Fast Full Scan Usage To Avoid Full Table Scans (Doc ID 701 ...

  5. 推荐一些C#相关的网站和书籍

    1.http://msdn.microsoft.com/zh-CN/ 微软的官方网站,C#程序员必去的地方.那里有API开发文档,还有各种代码.资源下载. 2.http://social.msdn.m ...

  6. WPF--常用布局介绍

    概述:本文简要介绍了WPF中布局常用控件及布局相关的属性 1 Canvas Canvas是一个类似于坐标系的面板,所有的元素通过设置坐标来决定其在坐标系中的位置..具体表现为使用Left.Top.Ri ...

  7. 推断(inference)、贝叶斯规则(Bayes's rule)与导出分布(derived distribution)

    1. 建模 对原始信号 X 进行观测,观测可以抽象为(离散:PY|X(y|x), 连续:fY|X(y|x)),物理世界噪声的存在,将导致观测到的 X 出现一定的噪声,记为 Y: X⇒fY|X(y|x) ...

  8. Neo4j集群环境建设

    简介: Neo4j它是目前的主流地图数据库.它本身提供了高可用性集群解决方案.本文将试图建立一个高可用性neo4j周围环境. 1. 这是一个地图数据库? 图形库(graphic database)问题 ...

  9. DDD实战7 对项目进行单元测试

    此次采用的方法是 创建一个单元测试项目 在其中利用HttpClient 模拟浏览器 webapi 进行post请求来验证程序. [TestClass] public class ProductTest ...

  10. 简明Python3教程 13.面向对象编程

    简介 (注: OOP代表面向对象编程,OO代表面向对象,以后全部使用英文缩写) 迄今为止我们编写的所有程序都是围绕函数创建的,函数即操纵数据的语句块.这称作面向过程编程. 除此之外还有另一种组织程序的 ...