c# - Observable.FromEvent 签名

标签 c# system.reactive reactive-programming observable

Observable.FromEvent中有这样一个签名的目的是什么? ? 对于 example :

var appActivated = Observable.FromEvent(
h => Application.Current.Activated += h,
h => Application.Current.Activated -= h);

特别是h是什么?为什么是 +=,然后是 -=?我们是从事件还是从事件处理程序创建 Observable?如果来自事件,为什么不只是有一个像这样的签名:

var appActivated = Observable.FromEvent(Application.Current.Activated);

最佳答案

那是因为无法将事件作为参数 传递给方法。您可以作为委托(delegate) 传递事件,但这并不能使您能够订阅/取消订阅该事件。看这个answer埃里克·利珀特 (Eric Lippert)。

Observable.From 基本上说“好的,我会给你一个 observable,它是事件的包装器,但你需要为我提供两个委托(delegate):1) 一个委托(delegate)供我订阅我的事件处理程序,以及 2) 一个委托(delegate),让我在需要时取消订阅我的处理程序”。

所以在这种情况下,h => Application.Current.Activated += h 是一个被编译成委托(delegate)的 lambda 表达式。 h(处理程序)是输入参数,委托(delegate)接受该输入参数并将其订阅到 Activated 事件。第二个委托(delegate)是同一件事,只是它取消了处理程序的订阅。

关于c# - Observable.FromEvent 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35865972/

相关文章:

c# - LINQ 查询中的 List<T>.Contains(T) 出错

c# - 将 IEnumerable<Task<T>> 转换为 IObservable<T>

c# - observable 的依赖属性

javascript - 如何手动销毁ReactiveDict?

ios - 在 React Native 中隐藏/显示基于服务/动态地来自 json 的标签 <Text>

c# - 我的类(class)在序列化过程中丢失了方法

c# - 无法排序,因为 IComparer.Compare() 方法返回不一致的结果。再次

c# - 仅在公共(public)类或公共(public)方法 VS 2015 中支持创建单元测试

c# - 响应式(Reactive)管道——如何控制并行度?

multithreading - F# Rx 扩展 IObservable 并发事件