【C#】如何处理程序的触发事件

在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("停止监视器");

                    }

                }

            }

        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值