1

我试图限制同一函数可以订阅事件的次数。这个想法是我希望能够检查该事件是否已经被订阅,并拒绝任何重复的订阅。

我之前在 WPF 中使用自声明事件完成了此操作:

private static EventHandler<string> dataToDisplayEvent;   // Declare new event

public static event EventHandler<string> DataToDisplayEvent
{
    add
     {
        if (dataToDisplayEvent == null || 
           !dataToDisplayEvent.GetInvocationList().Contains(value)) dataToDisplayEvent += value;
     }
     remove
     {
        dataToDisplayEvent -= value;
     }
}

很简单,但是我现在正在尝试使用 Xamarin Forms(尽管我认为这不会有任何区别)并且使用来自插件而不是自声明事件的偶数。

我使用的插件是 Plugin.BLE https://github.com/xabre/xamarin-bluetooth-le

public event EventHandler<BluetoothStateChangedArgs> StateChanged
{
    add
    {
        if (!CrossBluetoothLE.Current.StateChanged.GetInvocationList().Contains(value))
        {
            CrossBluetoothLE.Current.StateChanged += value;
        }
    }
    remove => CrossBluetoothLE.Current.StateChanged -= value;
}

但是,这一直给我消息“事件'IBluetoothLE.StateChanged'只能出现在+=或-=的左侧

我很确定这与插件中事件的实现有关 - 但是,我正在尝试找出一个有效的(并且希望是优雅的)解决方法,并理解为什么我不能在插件中使用这种方法.

编辑 - 这个问题之前由于重复而被关闭 - 但是关于为什么插件 GetInvocationList() 不能被调用的原始问题在所谓的“重复”中没有得到回答。

重复:-event- 只能出现在 += 或 -= 的左侧

副本是关于后备存储的单独问题 - 我的问题是为什么不能从我正在使用的 BLE 插件中调用 GetinvocationList() 事件。

谢谢

4

0 回答 0