GetInvocationList() для EventHandler не работает должным образом

Я пытаюсь ограничить количество раз, когда событие может быть подписано одной и той же функцией. Идея состоит в том, что я хочу иметь возможность проверить, было ли уже подписано событие, и отклонить любые повторяющиеся подписки.

Я делал это раньше в 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, который я использую.

Спасибо


person DR_Bart    schedule 12.04.2021    source источник
comment
если ваш вопрос был закрыт как дубликат, то проголосуйте за его повторное открытие, пока не публикуйте ДРУГОЙ повторяющийся вопрос   -  person Jason    schedule 12.04.2021
comment
Я не могу найти вариант сделать это - я искал. посмотрю еще раз. Информационное окно предложило мне задать еще один вопрос, если на мой исходный вопрос не ответили, что я и сделал.   -  person DR_Bart    schedule 12.04.2021
comment
Вы пытались поместить случай remove в блок, подобный случаю add, вместо использования средства доступа =>?   -  person Jason    schedule 12.04.2021
comment
@ Джейсон Да, но это не имеет значения. Проблема связана с вызовом GetInvocationList() в обработчике событий StateChanged.   -  person DR_Bart    schedule 12.04.2021