通用C#Windows应用程序中被动扩展中的无参数委托

通用C#Windows应用程序中被动扩展中的无参数委托,c#,system.reactive,windows-10-universal,C#,System.reactive,Windows 10 Universal,我有一个eventhanler: public delegate void OnSizeEventHandler(); 我有一个类可以触发这种类型的事件 CustomObject.OnSize += OnResize; 正如您所看到的,它只是一个无参数委托 我想从被动扩展中使用它,如: var eventAsObservable = Observable.FromEvent<OnSizeEventHandler>( x => C

我有一个eventhanler:

 public delegate void OnSizeEventHandler();
我有一个类可以触发这种类型的事件

CustomObject.OnSize += OnResize;
正如您所看到的,它只是一个无参数委托

我想从被动扩展中使用它,如:

    var eventAsObservable = Observable.FromEvent<OnSizeEventHandler>(           
       x => CustomObject.OnSize += x,
       x => CustomObject.OnSize -= x);
var eventAsObservable=Observable.FromEvent(
x=>CustomObject.OnSize+=x,
x=>CustomObject.OnSize-=x);
我得到这个错误:

Error   CS0029  Cannot implicitly convert type 'System.Action<CustomObject.OnSizeEventHandler>' to 'CustomObject.OnSizeEventHandler'
错误CS0029无法将类型“System.Action”隐式转换为“CustomObject.OnSizeEventHandler”
我做错了什么?它在EventHandler中工作得很好,但是当涉及到自定义事件时,很难弄清楚如何使其工作


谢谢。

如果您查看的重载,您会发现没有与当前呼叫匹配的

您可能希望尝试使用此选项:

var eventAsObservable = Observable.FromEvent<OnSizeEventHandler>(           
   (Action x) => CustomObject.OnSize += new OnSizeEventHandler(x),
   (Action x) => CustomObject.OnSize -= new OnSizeEventHandler(x));
var eventAsObservable=Observable.FromEvent(
(操作x)=>CustomObject.OnSize+=新的OnSizeEventHandler(x),
(操作x)=>CustomObject.OnSize-=newonSizeEventHandler(x));
基本上,这是尝试对基于
操作
的事件提供Rx支持,并将每次传递的操作包装在一个
OnSizeEventHandler


我不想保证它会工作,但值得一试。

如果您查看的重载,您会发现没有任何与当前调用匹配的

您可能希望尝试使用此选项:

var eventAsObservable = Observable.FromEvent<OnSizeEventHandler>(           
   (Action x) => CustomObject.OnSize += new OnSizeEventHandler(x),
   (Action x) => CustomObject.OnSize -= new OnSizeEventHandler(x));
var eventAsObservable=Observable.FromEvent(
(操作x)=>CustomObject.OnSize+=新的OnSizeEventHandler(x),
(操作x)=>CustomObject.OnSize-=newonSizeEventHandler(x));
基本上,这是尝试对基于
操作
的事件提供Rx支持,并将每次传递的操作包装在一个
OnSizeEventHandler


我不想保证它会起作用,但值得一试。

找到了答案,仅仅映射到无参数事件是相当棘手的,但它起作用了:

var opened=Observable.FromEvent(
h=>()=>h(单位默认值),
h=>\u SolutionEvents.Opened+=h,
h=>_SolutionEvents.Opened-=h);

如果可能的话,我希望RX更简单,或者包含FromEvent的重载。

找到了答案,仅仅映射到无参数事件是相当棘手的,但它可以工作:

var opened=Observable.FromEvent(
h=>()=>h(单位默认值),
h=>\u SolutionEvents.Opened+=h,
h=>_SolutionEvents.Opened-=h);

如果可能的话,我希望RX更简单,或者包含FromEvent的重载。

嗨,Jon,谢谢你的回答,我会尽可能使用这个约定,但是这个代理来自我无法修改的库。您建议的答案是,尽管它编译了,但会抛出一个异常:附加信息:无法绑定到目标方法,因为它的签名或安全透明性与委托类型的签名或安全透明性不兼容。它需要一个带有参数的委托,而我的委托是无参数的。@FernandoUrkijoCereceda:如果在问题中声明该委托不受您的控制,会很有用。为例外感到羞耻-将进行编辑。嗨,Jon,谢谢你的回答,我会尽可能地使用这个约定,但是这个代理来自一个我无法修改的库。您建议的答案是,尽管它编译了,但会抛出一个异常:附加信息:无法绑定到目标方法,因为它的签名或安全透明性与委托类型的签名或安全透明性不兼容。它需要一个带有参数的委托,而我的委托是无参数的。@FernandoUrkijoCereceda:如果在问题中声明该委托不受您的控制,会很有用。对异常感到羞耻-将进行编辑。