在C#中,处理程序触发的事件通常涉及以下几个步骤:
定义事件:首先确定你要使用的对象是否有已经定义好的事件。如果需要自定义,则可以在类中声明一个委托类型和一个公共事件变量。
订阅事件:使用对象的 += 操作符将指定的方法与事件关联起来,这样当事件触发时就能调用这个方法了。
处理事件(事件处理器):定义要执行的操作的方法。此方法必须匹配在类中声明的委托的签名。
触发事件:当需要触发事件时,只需简单地调用该事件,通常是在某个特定操作完成或发生之后。
下面通过一个简单的例子来展示如何实现这些步骤:
假设有一个 Mouse 类,它包含一个鼠标点击事件 ClickEvent。我们想在每次用户单击鼠标左键时打印一条消息。
步骤1: 定义事件
public class Mouse
{
public delegate void ClickHandler(object sender, EventArgs e);
public event ClickHandler ClickEvent;
// 模拟触发点击事件的函数
private void SimulateClick()
{
OnClick();
}
protected virtual void OnClick()
{
ClickEvent?.Invoke(this, new EventArgs());
}
}
步骤2: 订阅事件
class Program
{
static void Main(string[] args)
{
Mouse mouse = new Mouse();
// 注册事件处理程序
mouse.ClickEvent += Mouse_Click;
// 模拟鼠标点击
mouse.SimulateClick();
Console.ReadLine();
}
private static void Mouse_Click(object sender, EventArgs e)
{
Console.WriteLine("Mouse clicked");
}
}
步骤3: 处理事件
Mouse_Click 方法定义了在 ClickEvent 被触发时应执行的操作。它会在控制台上打印一条消息 "Mouse clicked"。
步骤4: 触发事件
这个例子中的 SimulateClick() 函数模拟了一个鼠标点击动作,通过调用 OnClick() 来实际触发 ClickEvent 事件。
以上就是C#中处理程序触发的事件的基本方法。这样就实现了当事件被触发时执行特定操作的功能
using System;
using System.IO;
namespace Test
{
class Program
{
public static string filePath = @"D:\\Inspect.txt";
static void Main(string[] args)
{
FileSystemWatcher watcher = new FileSystemWatcher();
// 设置监视器的属性
watcher.Path = Path.GetDirectoryName(filePath);
watcher.Filter = Path.GetFileName(filePath);
// 添加事件处理程序
watcher.Changed += OnChanged;
// 开始监听
watcher.EnableRaisingEvents = true;
Console.WriteLine($"监控文件: {filePath}");
Console.WriteLine("按任意键退出...");
Console.ReadKey();
}
private static void OnChanged(object source, FileSystemEventArgs e)
{
if (e.ChangeType == WatcherChangeTypes.Changed)
{
using (StreamReader reader = new StreamReader(filePath))
{
string content = reader.ReadToEnd();
Console.WriteLine(content);
bool compare = content.Contains("abc123");
if (compare)
{
// 停止监视器
((FileSystemWatcher)source).Dispose();
Console.WriteLine("停止监视器");
}
}
}
}
}
}