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事件桥接
# 与现有.NET事件桥接详解
# 浅谈C#中的委托、事件与异步
# C#微信公众号开发 微信事件交互
# 详解C#中委托
# 事件与回调函数讲解
# C#中事件的定义和使用
# C#3.0使用EventLog类写Windows事件日志的方法
# C#自定义事件监听实现方法
# C#实现给DataGrid单元行添加双击事件的方法
# C#事件实例详解
# 鼠标
# 您可以
# 运算符
# 我们可以
# 本主题
# 桥接
# 转换为
# 在这个
# 在此
# 为您
# 并在
# 希望能
# 此类
# 将被
# 可以使用
# 所有资源
# 要将
# 为您提供
# 将此
# 谢谢大家
相关文章:
c++怎么用jemalloc c++替换默认内存分配器【性能】
北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?
详解jQuery中基本的动画方法
建站主机类型有哪些?如何正确选型
如何用PHP工具快速搭建高效网站?
如何配置支付宝与微信支付功能?
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何快速生成专业多端适配建站电话?
深圳网站制作的公司有哪些,dido官方网站?
如何选择美橙互联多站合一建站方案?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何通过远程VPS快速搭建个人网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
常州自助建站工具推荐:低成本搭建与模板选择技巧
如何高效完成独享虚拟主机建站?
如何用虚拟主机快速搭建网站?详细步骤解析
如何在建站之星绑定自定义域名?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
建站ABC备案流程中有哪些关键注意事项?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
南宁网站建设制作定制,南宁网站建设可以定制吗?
建站之星备案是否影响网站上线时间?
如何用西部建站助手快速创建专业网站?
太原网站制作公司有哪些,网约车营运证查询官网?
如何优化Golang Web性能_Golang HTTP服务器性能提升方法
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
潮流网站制作头像软件下载,适合母子的网名有哪些?
网站按钮制作软件,如何实现网页中按钮的自动点击?
网站制作知乎推荐,想做自己的网站用什么工具比较好?
如何在云服务器上快速搭建个人网站?
建站DNS解析失败?如何正确配置域名服务器?
如何选择高效稳定的ISP建站解决方案?
威客平台建站流程解析:高效搭建教程与设计优化方案
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
黑客入侵网站服务器的常见手法有哪些?
建站之星如何防范黑客攻击与数据泄露?
公众号网站制作网页,微信公众号怎么制作?
建站之星如何修改网站生成路径?
,交易猫的商品怎么发布到网站上去?
网站制作壁纸教程视频,电脑壁纸网站?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
,南京靠谱的征婚网站?
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
如何通过云梦建站系统实现SEO快速优化?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
*请认真填写需求信息,我们会在24小时内与您取得联系。