C#在程序中定义和使用自定义事件可以分为以下几个步骤:
步骤1:在类中定义事件
using System;
public class TestClass
{
  //....
  public event EventHandler TestEvent
}
步骤2:定义事件参数
注意:事件参数类TestEventArgs继承自System.EventArgs
using System;
public class TestEventArgs : EventArgs
{
  public TestEventArgs() : base() { }
 
  public string Message { get; set; }
}
步骤3:在TestClass 引发事件
public class TestClass
{
  // 这个方法引发事件
  public void RaiseTestEvent(string message)
  {
    if (TestEvent == null) return;
    TestEvent(this, new TestEventArgs { Message = message });
  }
  public event EventHandler TestEvent; 
}
步骤4:使用事件
class Program
{
  static void Main(string[] args)
  {
 
    TestClass tc = new TestClass();
    // 挂接事件处理方法
    tc.TestEvent += Tc_TestEvent;
     
    Console.WriteLine("按任意键引发事件");
    Console.ReadKey();    
    // 引发事件
    tc.RaiseTestEvent("通过事件参数传递的字符串");
     
    Console.WriteLine("按任意键退出");
    Console.ReadKey();
  }
  private static void Tc_TestEvent(object sender, EventArgs e)
  {
    // 将事件参数强制转换为TestEventArgs
    TestEventArgs te = (TestEventArgs)e;
    // 显示事件参数中的Message
    Console.WriteLine(te.Message);
  }
}
完整的程序如下
using System;
public class TestClass
{
  public void RaiseTestEvent(string message)
  {
    if (TestEvent == null) return;
    TestEvent(this, new TestEventArgs { Message = message });
  }
 
  public event EventHandler TestEvent; 
}
public class TestEventArgs : EventArgs
{
  public TestEventArgs() : base() { }
 
  public string Message { get; set; }
}
class Program
{
  static void Main(string[] args)
  {
 
    TestClass tc = new TestClass();
    tc.TestEvent += Tc_TestEvent;
    Console.WriteLine("按任意键引发事件");
    Console.ReadKey();
    tc.RaiseTestEvent("通过事件参数传递的字符串");
    Console.WriteLine("按任意键退出");
    Console.ReadKey();
  }
  private static void Tc_TestEvent(object sender, EventArgs e)
  {
    TestEventArgs te = (TestEventArgs)e;
    Console.WriteLine(te.Message);
  }
}