C#事件处理入门指南

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); class WFEventArg : EventArgs { public readonly string TheString; public WFEventArg(string s) { TheString = s; } } class Worker { public readonly string Name; public event WorkerEndHandler WorkEnd; public Worker(string name) { Name = name; } public void Work(string s) { Thread.Sleep(2500); WFEventArg e1 = new WFEventArg(s); OnWorkEnd((object)this, e1); } void OnWorkEnd(object o, WFEventArg e) { if (WorkEnd != null) WorkEnd(o, e); } } }

在这里,创建了一个名为Worker的简单类,该类包含一个名为Work的过程,该过程有一个参数(一个字符串)。这个函数实际上什么也不做,只是休眠2.5秒,然后释放一个事件(告诉某人它完成了它的工作)。为此,需要一个委托- WorkerEndHandler - 和一个名为WFEventArg的类,该类继承自EventArgs类。事件是通过名为OnWorkEnd的方法释放的。

接下来会发生什么...

然后需要使用这个事件...好吧,创建了一个简单的表单,有两个按钮和一个标签,创建了两个Worker对象(wkr1,wkr2)。当点击第一个按钮时,第一个工人(wkr1)将工作,以此类推,第二个按钮。当表单加载时,告诉工人当他们完成工作时应该做什么 - 使用事件。工人的事件都在同一个方法中:wkr_WorkEnd。这个函数的参数与释放事件的OnWorkEnd方法的参数相同,可以根据需要自定义这些参数。最后,这个方法做了在该事件中想要做的事情:将标签文本字段设置为EventArg类,并告诉用户工人完成了他的工作。可以在该事件中做任何想做的事情,可以选择!

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 Worker wkr1 = new Worker("The 1'st worker"); Worker wkr2 = new Worker("The 2'nd worker"); private void button1_Click(object sender, EventArgs e) { wkr1.Work("AnAbAnAnA"); } private void button2_Click(object sender, EventArgs e) { wkr2.Work("aNaBaNaNa"); } private void Form1_Load(object sender, EventArgs e) { wkr1.WorkEnd += new WorkerEndHandler(wkr_WorkEnd); wkr2.WorkEnd += new WorkerEndHandler(wkr_WorkEnd); } void wkr_WorkEnd(object o, WFEventArg e) { Worker worker = (Worker)o; label1.Text = e.TheString; MessageBox.Show(worker.Name + ":\tI've done my job!!!"); } #endregion } }

重点

事件在C#编程中是必要的,无论是桌面应用程序、Web应用程序、控制台应用程序等等!

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485