2016-07-05 5 views
0

私はeventhanler持っている:パラメータ少ないデリゲート

public delegate void OnSizeEventHandler(); 

をそして、あなたが見ることができるように、私はそのタイプ

CustomObject.OnSize += OnResize; 

のイベントをトリガーするクラスを持っていますそれは単なるパラメータのないデリゲートです。

私のような反応性の拡張機能から、それを使用したい:

var eventAsObservable = Observable.FromEvent<OnSizeEventHandler>(   
     x => CustomObject.OnSize += x, 
     x => CustomObject.OnSize -= x); 

私はこのエラーを取得する:

Error CS0029 Cannot implicitly convert type 'System.Action<CustomObject.OnSizeEventHandler>' to 'CustomObject.OnSizeEventHandler' 

は私が間違って何をしているのですか?それはEventHandlersでかなりうまく動作しますが、カスタムイベントになると、それを動作させる方法を理解することがとても難しいです。

ありがとうございました。

答えて

1

は答えを見つけて、それだけでパラメータのないイベントにマップするためにはかなりトリッキーだが、それは動作します:

Convert event without EventArgs using Observable.FromEvent

var opened = Observable.FromEvent<_dispSolutionEvents_OpenedEventHandler, Unit>(
h =>() => h(Unit.Default), 
h => _SolutionEvents.Opened += h, 
h => _SolutionEvents.Opened -= h); 

私はもっとシンプルにRXをlikwたいかの過負荷を含めます可能であればFromEvent。

1

FromEventのオーバーロードを見ると、現在の通話に一致するものはないことがわかります。

あなたが代わりにこれを使用しようとする場合があります:

var eventAsObservable = Observable.FromEvent<OnSizeEventHandler>(   
    (Action x) => CustomObject.OnSize += new OnSizeEventHandler(x), 
    (Action x) => CustomObject.OnSize -= new OnSizeEventHandler(x)); 

は基本的に、それはActionベースのイベントのためのRxのサポートを取り、OnSizeEventHandlerたびに渡されたアクションをラップしようとしています。

私はそれが動作することを保証したくないですが、それは試してみる価値があります。

+0

こんにちは、私はできる限り、私はこのコンベンションを使用しますが、この代理人は私が変更できないライブラリからのものです。あなたが提案した答えはコンパイルされても例外がスローされます。追加情報:シグネチャまたはセキュリティの透過性がデリゲート型のものと互換性がないため、ターゲットメソッドにバインドできません。パラメータ付きのデリゲートが必要で、デリゲートにはパラメータがありません。 – toroveneno

+0

@FernandoUrkijoCereceda:デリゲートが質問の中であなたのコントロールから外れていると述べると便利でした。例外についての恥 - 編集します。 –

関連する問題