通用 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'
我做错了什么?它与事件处理程序一起工作得很好,但是当涉及到自定义事件时,很难弄清楚如何使其工作。
谢谢。
如果您查看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 的重载。