C# 完成与现有.NET事宜桥接简朴实例
Rx供应了工场要领,以便与.NET中的现有异步源桥接,以便您能够运用由任何范例的数据流供应的雄厚的组合,过滤和资本管理功用。 本主题搜检FromEventPattern运算符,它许可将.NET事宜作为可视察序列“导入”到Rx中。 每次激发事宜时,OnNext音讯将被通报到可视察的序列。 然后,您能够像任何其他可视察序列一样处置惩罚事宜数据。
Rx并不旨在替代现有的异步编程模子,如.NET事宜,异步形式或使命并行库。 然则,当您尝试编写事宜时,Rx的工场要领将为您供应在当前编程模子中找不到的轻易。 这关于资本保护(比方,什么时候作废定阅)和过滤(比方,选摘要吸收什么范例的数据)特别云云。 在本主题和背面的主题中,您能够相识这些Rx功用怎样帮助您举行异步编程。
将.NET事宜转换为Rx可视察序列
以下示例为鼠标挪动事宜建立一个简朴的.NET事宜处置惩罚顺序,并在Windows窗体的标签中打印鼠标的位置。
using System.Linq; using System.Windows.Forms; using System.Reactive; using System.Reactive.Linq; using System; using WinForm; using System.Reactive.Disposables; class Program { static void Main() { var lbl = new Label(); var frm = new Form { Controls = { lbl } }; frm.MouseMove += (sender, args) => { lbl.Text = args.Location.ToString(); }; Application.Run(frm); }; }
要将事宜导入Rx,您能够运用FromEventPattern运算符,并供应将由要桥接的事宜激发的EventArgs对象。 FromEventPattern运算符用于吸收对象发送方和一些EventArgs的事宜,并运用反射为您找到这些增加/删除要领。 然后,它将给定事宜转换为具有EventPattern范例的可视察序列,该范例捕捉发送方和事宜参数。
关于具有一个参数(非标准事宜)的代办,能够运用FromEvent操纵符,该操纵符须要一对用于附加和星散处置惩罚顺序的函数。
鄙人面的示例中,我们将Windows窗体的鼠标挪动事宜流转换为可视察序列。 每次触发鼠标挪动事宜时,定阅者将收到OnNext关照。 然后,我们能够搜检此类关照的EventArgs值,并猎取鼠标挪动的位置。
using System.Linq; using System.Windows.Forms; using System.Reactive; using System.Reactive.Linq; using System; using WinForm; using System.Reactive.Disposables; class Program { static void Main() { var lbl = new Label(); var frm = new Form { Controls = { lbl } }; IObservable<EventPattern<MouseEventArgs>> move = Observable.FromEventPattern<MouseEventArgs>(frm, "MouseMove"); move.Subscribe(evt => { lbl.Text = evt.EventArgs.Location.ToString(); }) ; Application.Run(frm); }; }
注重,在这个示例中,move变成了一个可视察的序列,我们能够进一步操纵。 运用LINQ运算符的查询可视察序列主题将向您展现怎样将此序列投影到点范例的鸠合中并过滤其内容,以便应用顺序只吸收满足特定条件的值。
事宜处置惩罚顺序的清来由Subscribe要领返回的IDisposable对象担任。 挪用Dispose(经由过程在此示例中抵达use-block的末端来完成)将开释包含底层事宜处置惩罚顺序的序列正在运用的一切资本。 这本质上是代表您作废定阅运动。
以上就是C#完成与现有.NET事宜桥接的简朴代码的细致内容,更多请关注ki4网别的相干文章!