我是 Rx 的新手,正在浏览一些样本并遇到以下情况:
Observable.FromEventPattern<RoutedEventHandler, RoutedEventArgs>(
h => new RoutedEventHandler(h),
h => Loaded += h,
h => Loaded -= h)
.Select(_ => true)
.StartWith(IsLoaded)
.Where(l => l)
.Take(1)
.Subscribe(_ => Console.WriteLine("loaded");
我试图解构这个陈述以弄清楚它在做什么,但我并不是 100% 清楚。
我了解FromEventPattern如何将Loaded事件转换为可观察的序列。现在,Select将在IsLoaded为真时触发(这就是我的假设)。Select是否只是从 RoutedEventArgs 获取信息?
现在,我不确定为什么StartsWith在那里。 StartsWith会将一系列值添加到可观察序列中。那么它只是将IsLoaded的值添加到列表的开头吗?Select发生后它不是已经存在了吗?
.Where没有应用任何类型的过滤器,因此.Take将只取序列的第一个值(在这种情况下不再使用)。然后它订阅并仅在加载控件时写入控制台。
这种分析大部分正确吗?
此外,关于调试此类事情的任何提示(意思是,在链的不同阶段,序列是什么样的)?我可以通过附加调试器来获取信息,但我想知道是否还有其他可能常用的技巧/提示。