Как использовать Observable.FromEvent вместо FromEventPattern и избегать строковых литералов имен событий

Я изучаю Rx в WinForms и имею следующий код:

// Create an observable from key presses, grouped by the key pressed
var groupedKeyPresses = Observable.FromEventPattern<KeyPressEventArgs>(this, "KeyPress")
                                  .Select(k => k.EventArgs.KeyChar)
                                  .GroupBy(k => k);

// Increment key counter and update user's display
groupedKeyPresses.Subscribe(keyPressGroup =>
{
    var numPresses = 0;
    keyPressGroup.Subscribe(key => UpdateKeyPressStats(key, ++numPresses));
});

Это работает / работает отлично, потоки в событиях KeyPress, группирует по нажатой клавише, а затем отслеживает, сколько раз была нажата каждая клавиша, и вызываетUpdateKeyPressStats метод с ключом и новым количеством нажатий. Отправим его!

Тем не менее, я не фанатFromEventPattern подпись, из-за строковой литеральной ссылки на событие. Итак, я решил попробоватьFromEvent вместо.

// Create an observable from key presses, grouped by the key pressed
var groupedKeyPresses = Observable.FromEvent<KeyPressEventHandler, KeyPressEventArgs>(h => this.KeyPress += h, h => this.KeyPress -= h)
                                  .Select(k => k.KeyChar)
                                  .GroupBy(k => k);

// Increment key counter and update user's display
groupedKeyPresses.Subscribe(keyPressGroup =>
{
    var numPresses = 0;
    keyPressGroup.Subscribe(key => UpdateKeyPressStats(key, ++numPresses));
});

Таким образом, единственное изменение было заменойObservable.FromEventPattern с участиемObservable.FromEvent (и путь вSelect LINQ-запрос, чтобы получитьKeyChar). Остальные, в том числеSubscribe методы идентичны. Однако во время выполнения второго решения я получаю:

Необработанное исключение типа «System.ArgumentException» произошло в mscorlib.dll

Дополнительная информация: Невозможно выполнить привязку к целевому методу, поскольку его подпись или прозрачность безопасности не совместимы с сигнатурой типа делегата.

Что вызывает это исключение во время выполнения и как мне его избежать?

GUI: WinFormsRx & Rx-WinForms Версия: 2.1.30214.0 (через Nuget)Целевая структура: 4,5

Ответы на вопрос(1)

Ваш ответ на вопрос