我试图限制同一函数可以订阅事件的次数。这个想法是我希望能够检查该事件是否已经被订阅,并拒绝任何重复的订阅。
我之前在 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() 不能被调用的原始问题在所谓的“重复”中没有得到回答。
副本是关于后备存储的单独问题 - 我的问题是为什么不能从我正在使用的 BLE 插件中调用 GetinvocationList() 事件。
谢谢