我正在尝试学习自定义事件,并且尝试创建一个自定义事件,但似乎有问题
我创建了一个Form,静态类和自定义事件。我想要实现的是,当我按下按钮Form时将调用静态类函数,然后func会不时引发一个事件以报告当前状态。Form1将侦听是否引发该事件,如果发生,它将更改label1的Text
这是我到目前为止的
public partial class Form1 : Form { public EventHandler<Progress> progress; public Form1() { InitializeComponent(); progress += SetStatus; } private void SetStatus(object sender, Progress e) { label1.Text = e.Status; } private void button1_Click_1(object sender, EventArgs e) { TestClass.Func(); } }
文件2
class TestClass { public static void Func() { //time consuming code Report status // time consuming code report status } } public class Progress : EventArgs { public string Status { get; private set; } private Progress() {} public Progress(string status) { Status = status; } }
现在我不明白的是,如何从TestClass引发一个事件,以便Form1可以处理事件并更改标签。
这是创建自定义事件并引发它们的简便方法。您将在抛出的类中创建一个委托和一个事件。然后从代码的另一部分订阅该事件。您已经有一个自定义事件参数类,因此可以在此基础上构建其他事件参数类。注意:我尚未编译此代码。
public partial class Form1 : Form { private TestClass _testClass; public Form1() { InitializeComponent(); _testClass = new TestClass(); _testClass.OnUpdateStatus += new TestClass.StatusUpdateHandler(UpdateStatus); } private void UpdateStatus(object sender, ProgressEventArgs e) { SetStatus(e.Status); } private void SetStatus(string status) { label1.Text = status; } private void button1_Click_1(object sender, EventArgs e) { TestClass.Func(); } } public class TestClass { public delegate void StatusUpdateHandler(object sender, ProgressEventArgs e); public event StatusUpdateHandler OnUpdateStatus; public static void Func() { //time consuming code UpdateStatus(status); // time consuming code UpdateStatus(status); } private void UpdateStatus(string status) { // Make sure someone is listening to event if (OnUpdateStatus == null) return; ProgressEventArgs args = new ProgressEventArgs(status); OnUpdateStatus(this, args); } } public class ProgressEventArgs : EventArgs { public string Status { get; private set; } public ProgressEventArgs(string status) { Status = status; } }