通用 C# Windows 应用程序中 Reactive Extensions 中的无参数委托

Parameter less delegate in Reactive Extensions in a Universal C# Windows App

我有一个活动主持人:

 public delegate void OnSizeEventHandler();

我有 class 触发该类型的事件

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 一起工作得很好,但是当涉及到自定义事件时,很难弄清楚如何让它工作。

谢谢。

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

您可能想尝试使用这个:

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

基本上,这是尝试让 Rx 支持基于 Action 的事件,并且每次都将传递的操作包装在 OnSizeEventHandler 中。

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

找到答案,仅映射到无参数事件非常棘手,但它有效:

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

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