【问题标题】:How can I clear event subscriptions in C++/CLI?如何在 C++/CLI 中清除事件订阅?
【发布时间】:2013-11-04 14:16:41
【问题描述】:

我有一个类 Foo,它有一个公共事件 Bar。我需要清除对 Bar 的所有订阅。

在 C# 中就像(在 Foo 类中)一样简单:

public void RemoveSubscribers() { this.Bar = null; }

(另见this问题)

如何在 C++/CLI 中执行此操作?我无法将 Bar 设置为 nullptr:编译器吐出错误

Usage requires 'Foo::Bar' to be a data member

我查看了 Bar 的 RemoveAll 方法,但我不明白我应该提供什么作为参数...

编辑 1: 为清楚起见,Bar 声明如下:

public ref class Foo
{
public:
    event MyEventHandler^ Bar;
};

【问题讨论】:

  • 好吧,你是如何声明 Bar 的?
  • @Yochai Timmer 为了清楚起见,我编辑了我的问题。

标签: .net events c++-cli


【解决方案1】:

C++/CLI 甚至在类中也隐藏了底层的后备存储(委托),因此您不能简单地将其设置为 nullptr。因为你不能依赖默认的事件实现,所以你必须自己做:

private: EventHandler^ _myEvent;

public: event EventHandler^ MyEvent 
{
    void add(EventHandler^ handler)
    {
        _myEvent += handler;
    }

    void remove(EventHandler^ handler) 
    {
        _myEvent -= handler;
    }
}

现在您可以简单地取消 myEvent 委托:

_myEvent = nullptr;

当然,这也会改变您调用它的方式(与 C# 相同,而不是 C++/CLI 短版):

EventHandler^ myEvent = _myEvent;
if (myEvent != nullptr)
    myEvent(this, e);

【讨论】:

  • 感谢您的回复,我会试一试。
猜你喜欢
  • 2010-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
相关资源
最近更新 更多