WinForm的事件订阅到另一个类 [英] WinForm event subscription to another class

查看:327
本文介绍了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的永远不会触发。

I'm trying to get my winform UI to subscribe to an event in EventThrower class. DoSomething never fires.

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

推荐答案

这是因为你创造。调用测试之前,一个新的EventThrower

This is because you create a new EventThrower before calling test.

如果您改变:

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



to:

    _Thrower.test();



这将调用DoSomething的。

It will call DoSomething.

这篇关于WinForm的事件订阅到另一个类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆