通用C#Windows应用程序中被动扩展中的无参数委托
我有一个eventhanler:通用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
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:如果在问题中声明该委托不受您的控制,会很有用。对异常感到羞耻-将进行编辑。