Реактивен в VB.net - PullRequest
       3

Реактивен в VB.net

1 голос
/ 30 июня 2011

Может кто-нибудь помочь мне, пожалуйста!

Я пытался реализовать что-то, что в C #:

var keysIO =   Observable.FromEvent<KeyDownEventHandler, RoutedEventArgs>(
                                h => new KeyDownEventHandler(h),
                                h => btn.KeyDown += h,
                                h => btn.KeyDown -= h));

Как записать это в VB?

Спасибо, R

Ответы [ 2 ]

2 голосов
/ 30 июня 2011

Сначала я получил ваш код для компиляции на моей машине:

var keysIO = Observable.FromEvent<KeyEventHandler,KeyEventArgs>(
                                    h => btn.KeyDown += h, 
                                    h => btn.KeyDown -= h);

Затем я открыл его в Reflector и изменил значение на

Dim keysIO As IObservable(Of KeyEventArgs) = _
        Observable.FromEvent(Of KeyEventHandler, KeyEventArgs)( _
            (Sub(h) AddHandler btn.KeyDown, h), _
            (Sub(h) RemoveHandler btn.KeyDown, h))
0 голосов
/ 30 июня 2011

C # btn.KeyDown + = h соответствует следующему в VB:

AddHandler btn.KeyDown, AddressOf h

Аналогично, - = соответствует RemoveHandler.

Однако у компилятора VB возникают проблемы при использовании пользовательских типов EventHandler, которые не являются непосредственно универсальными EventHandler (Of T). В случае вашего примера я не уверен, что делает пользовательский тип KeyDownEventHandler в параметре преобразования. Если вам это не нужно, возможно, вы сможете использовать слабо типизированную версию:

Dim keysIO = Observable.FromEventPattern(Of KeyDownEventHandler, RotedEventArgs)(btn, "KeyDown")
...