通用 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 的重载。
我有一个活动主持人:
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 的重载。