• WinForm中使用自定义事件


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace ConsoleApplication8
    {

    class Program
    {
    static void Main(string[] args)
    {

    //第三步:定义对象并添加事件
    Priter priter = new Priter();
    priter.OnPrintComplete += new EventHandler<PrintCompleteEventArgs>(priter_OnPrintComplete);
    for (int i = 0; i < 500; i++)
    {

    //第四步:执行实际方法
    priter.Print(i);
    System.Threading.Thread.Sleep(100);
    }
    }

    static void priter_OnPrintComplete(object sender, PrintCompleteEventArgs e)
    {

    //第五步:处理回调函数
    Console.WriteLine("完成打印:" + e.message);
    if (e.message % 10 == 0)
    Console.WriteLine("我是10的倍数," + e.message);
    }
    }

    /// <summary>
    /// 第二步:定义事件类
    /// </summary>
    public class Priter
    {
    /// <summary>
    /// 用event关键字声明事件对象(如果EventHandler不够用,可先用delegate定义一个处理事件)
    /// </summary>
    public event EventHandler<PrintCompleteEventArgs> OnPrintComplete;

    /// <summary>
    /// 实际打印方法
    /// </summary>
    /// <param name="data"></param>
    public void Print(int data)
    {
    //在这里执行打印操作..
    //TO DO..
    //..
    Console.WriteLine("开始打印:"+data);

    //执行完后通知执行外部的事件方法(如果是异步操作,可另外开一线程监听然后执行以下通知)
    OnPrintComplete(this, new PrintCompleteEventArgs(data));
    }
    }

    /// <summary>
    /// 第一步:定义事件参数类
    /// </summary>
    public class PrintCompleteEventArgs : EventArgs
    {
    public int message;
    public PrintCompleteEventArgs(int Message)
    {
    this.message = Message;
    }
    }
    }

    --------------------------------------------------------------------------


    namespace 事件
    {
    //发布事件的类
    public class TestEventSource
    {
    //定义事件参数类
    public class TestEventArgs : EventArgs
    {
    public readonly char KeyToRaiseEvent;
    public TestEventArgs(char keyToRaiseEvent)
    {
    KeyToRaiseEvent = keyToRaiseEvent;
    }
    }

    //定义delegate
    public delegate void TestEventHandler(object sender, TestEventArgs e);
    //用event 关键字声明事件对象
    public event TestEventHandler TestEvent;

    //事件触发方法
    protected virtual void OnTestEvent(TestEventArgs e)
    {
    if (TestEvent != null)
    TestEvent(this, e);
    }

    //引发事件
    public void RaiseEvent(char keyToRaiseEvent)
    {
    TestEventArgs e = new TestEventArgs(keyToRaiseEvent);
    OnTestEvent(e);
    }

    }
    //监听事件的类
    public class TestEventListener
    {
    //定义处理事件的方法,他与声明事件的delegate具有相同的参数和返回值类型
    public void KeyPressed(object sender, TestEventSource.TestEventArgs e)
    {
    Console.WriteLine("发送者:{0},所按得健为:{1}", sender, e.KeyToRaiseEvent);
    }

    //订阅事件
    public void Subscribe(TestEventSource evenSource)
    {
    evenSource.TestEvent += new TestEventSource.TestEventHandler(KeyPressed);
    }
    //取消订阅事件
    public void UnSubscribe(TestEventSource evenSource)
    {
    evenSource.TestEvent -= new TestEventSource.TestEventHandler(KeyPressed);
    }
    }

    //测试类
    public class Test
    {
    public static void Main()
    {
    //创建事件源对象
    TestEventSource es = new TestEventSource();
    //创建监听对象
    TestEventListener el = new TestEventListener();
    //订阅事件
    Console.WriteLine("订阅事件\n");
    el.Subscribe(es);
    //引发事件
    Console.WriteLine("输入一个字符,再按enter键");
    string s = Console.ReadLine();
    es.RaiseEvent(s.ToCharArray()[0]);
    //取消订阅事件
    Console.WriteLine("\n取消订阅事件\n");
    el.UnSubscribe(es);

    //引发事件
    Console.WriteLine("输入一个字符,再按enter健");
    s = Console.ReadLine();
    es.RaiseEvent(s.ToCharArray()[0]);

    }
    }

    }

  • 相关阅读:
    线上幽灵:世界头号黑客米特尼克自传(体验头号黑客传奇人生,洞悉头号黑客思维模式!启明,绿盟,安天,安全宝,百度,腾讯,阿里……众安全专家一致推荐!)
    python+selenium环境搭建
    显示器尺寸和分辨率大小
    jQuery的get()post()getJson()方法
    python发送邮件
    python学习笔记之——正则表达式
    linux上查找文件存放地点和文件中查找字符串方法
    各种协议类型
    HTTP状态码、请求方法、响应头信息
    CSS选择器
  • 原文地址:https://www.cnblogs.com/zhuawang/p/3100323.html
Copyright © 2020-2023  润新知