C# 事件:创建类事件并使用该类






1.69/5 (12投票s)
关于 C# 事件的教育性文章。
引言
学习在 C# 中创建事件和使用该事件。
背景
此处提供的源代码来自 Visual Studio 2005。如果您使用其他环境,则需要将解决方案解析到您的环境中。请在网上查找相关信息!!!
使用代码
代码是程序员最重要的部分。下载它,看看它,然后如果你不是 100% 确定,再回来这里。
首先,您需要查看我的类,包含事件的类和
using System; using System.Collections.Generic; using System.Text; using System.Threading; namespace learnEvents { public delegate void WorkerEndHandler(object o, WFEventArg e); /// <summary> /// EventArg -> necesary to do corect your job /// </summary> class WFEventArg : EventArgs { public readonly string TheString; public WFEventArg(string s) { TheString = s; } } /// <summary> /// The class with the event /// </summary> class Worker { public readonly string Name; public event WorkerEndHandler WorkEnd; public Worker(string name) { Name = name; } public void Work(string s) { Thread.Sleep(2500);//Sleep, thats our job :) //Create a new event arg and after that... WFEventArg e1 = new WFEventArg(s); //...release it OnWorkEnd((object)this, e1); } void OnWorkEnd(object o, WFEventArg e) { //release the object if (WorkEnd != null) WorkEnd(o, e); } } }
那里发生了什么……我们创建一个简单的类 Worker,其中包含一个名为 Work 的过程,该过程有一个参数(一个字符串);这个函数不做任何事情,只是休眠 2.5 秒,然后释放一个事件(告诉 <某人> 它完成了工作)。为此,我们需要一个委托 -WorkerEndHandler- 和一个名为WFEventArg的类,该类继承自EventArgs类。事件由名为 OnWorkEnd 的方法释放
之后,我们需要使用该事件……好吧,我创建了一个带有两个按钮和一个标签的简单窗体,并创建了两个对象Worker(wkr1、wkr2)。单击第一个按钮时,第一个worker(wkr1)将工作,第二个按钮也一样。当窗体加载时,我们告诉我们的 worker完成工作时该做什么——> 我们使用Event。我们的worker的事件在同一个方法中:wkr_WorkEnd。此函数的参数与释放事件OnWorkEnd的方法的参数相同,您可以根据需要自定义这些参数。最后,此方法在事件发生时执行我们想要的操作:我将标签文本字段设置为 EventArg 类,并告诉用户 worker 已完成其工作。您可以在此事件中执行任何操作,您可以自由选择!
窗体代码在此
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace learnEvents { public partial class Form1 : Form { public Form1() { InitializeComponent(); } #region Lesson //we create two workers -> see that class Worker wkr1 = new Worker("The 1'st worker"); Worker wkr2 = new Worker("The 2'nd worker"); private void button1_Click(object sender, EventArgs e) { //We tell him to work... wkr1.Work("AnAbAnAnA"); } private void button2_Click(object sender, EventArgs e) { //We tell him to work... wkr2.Work("aNaBaNaNa"); } private void Form1_Load(object sender, EventArgs e) {//We spent two events .... wkr1.WorkEnd += new WorkerEndHandler(wkr_WorkEnd); /*is similar with <<wkr1.WorkEnd += wkr_WorkEnd;>> but if you use VS 2005, it's utilities will help you to build the function with who will treat this event. I don't know if there are more benefits for writing this short syntax for wiring this event */ wkr2.WorkEnd += new WorkerEndHandler(wkr_WorkEnd); ///...with the same function! } void wkr_WorkEnd(object o, WFEventArg e) { //The results ... Worker worker = (Worker)o; label1.Text = e.TheString; MessageBox.Show(worker.Name + ":\tI've done my job!!!"); //...is different from an object to another! } #endregion } }
关注点
事件在 c# 编程中是必不可少的,在所有领域:桌面应用程序、Web 应用程序、控制台应用程序等!
历史
关于这个主题有很多文章,但我提交这篇文章是认为想要学习使用事件的人,可以通过一个简单的项目作为例子很容易地学会。
祝大家一切顺利!
我的广告