Como usar Observable.FromEvent em vez de FromEventPattern e evitar nomes de eventos literais de string

Estou aprendendo sobre Rx dentro do WinForms e tenho o seguinte código:

// 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));
});

Isso funciona / corre perfeitamente, transmite os eventos KeyPress, agrupa a tecla pressionada e, em seguida, controla quantas vezes cada tecla foi pressionada e chama umUpdateKeyPressStats método com a chave e novo número de impressoras. Enviá-lo!

No entanto, eu não sou fã doFromEventPattern assinatura, devido à referência literal da string para o evento. Então, eu pensei em tentarFromEvent em vez de.

// 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));
});

Então, a única mudança foi trocarObservable.FromEventPattern comObservable.FromEvent (e o caminho noSelect Consulta LINQ para obter oKeyChar). O resto, incluindo oSubscribe métodos são idênticos. No entanto, em tempo de execução com a segunda solução, recebo:

Uma exceção sem tratamento do tipo 'System.ArgumentException' ocorreu em mscorlib.dll

Informações adicionais: Não é possível ligar ao método de destino porque sua assinatura ou transparência de segurança não é compatível com a do tipo delegado.

O que está causando essa exceção de tempo de execução e como devo evitá-lo?

GUI: WinFormsRx & Rx-WinForms Versão: 2.1.30214.0 (via Nuget)Estrutura de alvo: 4.5

questionAnswers(1)

yourAnswerToTheQuestion