c#动态事件订阅和取消订阅

问题描述

我希望能够让一个对象将其方法之一添加到传递给它的 EventHandler 中,并使该方法能够将自身从 EventHandler 中删除。

public class EventRaiser {
    public event EventHandler event1
    public event EventHandler event2
    public void fire() {
        event1?.Invoke(this,null);
        event2?.Invoke(this,null);
    }
}

public class EventSubscriber {
    EventHandler eh;
    public EventSubscriber(EventHandler eh) {
        this.eh = eh;
        eh += receive;
    }

    public void receive(object obj,EventArgs data) {
        // Do stuff.
        if(condition) eh -= receive;
    }
}

public class MainClass {
    public void Main() {
        EventRaiser er = new EventRaiser();
        EventSubscriber es1 = new EventSubscriber(er.event1);
        EventSubscriber es2 = new EventSubscriber(er.event2);
        er.fire();
    }
}

上面的代码无法编译,因为我什至无法将 er.event1er.event2 传递给 EventSubscriber(“该事件只能出现在 += 的左侧...” )。从 event 中删除 EventHandler 关键字可解决此问题,但无法正常取消订阅。有没有办法使这项工作?也许使用指针?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)