Я пытаюсь ограничить количество раз, когда событие может быть подписано одной и той же функцией. Идея состоит в том, что я хочу иметь возможность проверить, было ли уже подписано событие, и отклонить любые повторяющиеся подписки.
Я делал это раньше в 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- может отображаться только на левая часть += или -=
Дубликат - это отдельный вопрос о резервном хранилище - мой вопрос заключается в том, почему GetinvocationList() нельзя вызвать для события из плагина BLE, который я использую.
Спасибо
remove
в блок, подобный случаюadd
, вместо использования средства доступа=>
? - person Jason   schedule 12.04.2021