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用户界面订阅EventThrower类中的事件。 DoSomething永远不会发生。WinForm事件订阅到另一个类
这是因为你在调用测试之前创建一个新的EventThrower。
如果更改:
var eventThrower = new EventThrower();
eventThrower.test();
到:
_Thrower.test();
它将调用DoSomething的。
跛......我在你面前回答10秒:d –
事件不是静态的,EventHandler
的一个实例存在每个实例的EventThrower
。
您订阅事件上_Thrower
,但你创建的EventThrower
一个新的实例,并在调用test()
该实例。您从未订阅过该实例的事件,因此您的处理程序无法运行。
它应该是:
_Thrower.ThrowEvent += (sender2, args) => { DoSomething(); };
_Thrower.test();
感谢所有..都问了一个关于http://stackoverflow.com/questions/8335131/winform-events-in-another-class-net2-simplify-delegate的后续问题,这个问题与.NET2不同,并且试图简化。 –
尝试'_Thrower.test();',而不是把另一EventThrower() – CFinck