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

时间:2009-05-27 00:02:58

标签: c# events .net-2.0 event-handling

一个简单的场景:一个引发事件的自定义类。我希望在表单中使用此事件并对其做出反应。我怎么做?代码示例,请!

请注意,表单和自定义类是单独的类。

3 个答案:

答案 0 :(得分:27)

        public class EventThrower
        {
            public delegate void EventHandler(object sender, EventArgs args) ;
            public event EventHandler ThrowEvent = delegate{};

            public void SomethingHappened()
            {
                ThrowEvent(this, new EventArgs());
            }
        }

        public class EventSubscriber
        {
            private EventThrower _Thrower;

            public EventSubscriber()
            {
                _Thrower = new EventThrower();
                //using lambda expression..could use method like other answers on here
                _Thrower.ThrowEvent += (sender, args) => { DoSomething(); };
            }

            private void DoSomething()
            {
               //Handle event.....
            }
        }

答案 1 :(得分:6)

在表单中:

void SubscribeToEvent(OtherClass theInstance)
{
    theInstance.SomeEvent += this.MyEventHandler;
}

void MyEventHandler(object sender, EventArgs args)
{
    // Do something on the event
}

您只需按照与表单中的事件相同的方式订阅其他类的活动。要记住的三件重要事情:

1)您需要确保您的方法(事件处理程序)具有适当的声明以匹配另一个类上事件的委托类型。

2)您需要看到其他课程的事件(即:公共或内部)。

3)订阅类的有效实例,而不是类本身。

答案 2 :(得分:0)

假设您的事件由EventHandler处理,则此代码有效:

protected void Page_Load(object sender, EventArgs e)
{
    MyClass myObj = new MyClass();
    myObj.MyEvent += new EventHandler(this.HandleCustomEvent);
}

private void HandleCustomEvent(object sender, EventArgs e)
{
    //handle the event
}

如果您的“自定义事件”需要处理其他签名,则需要使用该签名。