通用 C# Windows 应用中反应式扩展中的参数无委托

本文关键字:参数 反应式 Windows 应用 通用 扩展 | 更新日期: 2023-09-27 17:55:20

我有一个事件:

 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'

我做错了什么?它与事件处理程序一起工作得很好,但是当涉及到自定义事件时,很难弄清楚如何使其工作。

谢谢。

通用 C# Windows 应用中反应式扩展中的参数无委托

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

您可能想尝试改用它:

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

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

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

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

使用 Observable.FromEvent 转换没有 EventArgs 的事件

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

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