Csharp/C#教程:WinForm事件订阅另一个类分享


WinForm事件订阅另一个类

public partial class Form1 : Form { private EventThrower _Thrower; public Form1() { InitializeComponent(); } private void DoSomething() { MessageBox.Show("It worked"); } private void button1_Click(object sender, EventArgs e) { _Thrower = new EventThrower(); //using lambda expression..need to use .NET2 so can't use this. _Thrower.ThrowEvent += (sender2, args) => { DoSomething(); }; var eventThrower = new EventThrower(); eventThrower.test(); } } public class EventThrower { public delegate void EventHandler(object sender, EventArgs args); public event EventHandler ThrowEvent = delegate { }; public void SomethingHappened() { ThrowEvent(this, new EventArgs()); } public void test() { System.Threading.Thread.Sleep(1000); SomethingHappened(); } } 

我正在尝试让我的winform UI订阅EventThrower类中的事件。 DoSomething永远不会开火。

如何在c#中订阅其他类的事件?

这是因为您在调用test之前创建了一个新的EventThrower。

如果你改变:

  var eventThrower = new EventThrower(); eventThrower.test(); 

至:

  _Thrower.test(); 

它会调用DoSomething。

事件不是静态的, EventThrower 每个实例都存在一个EventHandler 实例

您在_Thrower上订阅了该事件,但您创建了一个新的EventThrower实例并在该实例上调用test() 。 您从未在该实例上订阅该事件,因此您的处理程序无法运行。

它应该是:

上述就是C#学习教程:WinForm事件订阅另一个类分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 _Thrower.ThrowEvent += (sender2, args) => { DoSomething(); }; _Thrower.test(); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1033677.html

(0)
上一篇 2022年1月18日
下一篇 2022年1月18日

精彩推荐