全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C# 实现与现有.NET事件桥接简单实例

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#事件实例详解  # 鼠标  # 您可以  # 运算符  # 我们可以  # 本主题  # 桥接  # 转换为  # 在这个  # 在此  # 为您  # 并在  # 希望能  # 此类  # 将被  # 可以使用  # 所有资源  # 要将  # 为您提供  # 将此  # 谢谢大家 


相关文章: 广州商城建站系统开发成本与周期如何控制?  淘宝制作网站有哪些,淘宝网官网主页?  如何在IIS中新建站点并解决端口绑定冲突?  如何在腾讯云免费申请建站?  如何通过智能用户系统一键生成高效建站方案?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  公司门户网站制作流程,华为官网怎么做?  javascript中对象的定义、使用以及对象和原型链操作小结  免费网站制作appp,免费制作app哪个平台好?  如何通过NAT技术实现内网高效建站?  在线流程图制作网站手机版,谁能推荐几个好的CG原画资源网站么?  英语简历制作免费网站推荐,如何将简历翻译成英文?  建站之星后台管理如何实现高效配置?  如何在Windows服务器上快速搭建网站?  如何在搬瓦工VPS快速搭建网站?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  如何在阿里云通过域名搭建网站?  定制建站流程解析:需求评估与SEO优化功能开发指南  如何在企业微信快速生成手机电脑官网?  建站之星如何一键生成手机站?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  建站之星与建站宝盒如何选择最佳方案?  建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析  定制建站模板如何实现SEO优化与智能系统配置?18字教程  北京网站制作公司哪家好一点,北京租房网站有哪些?  成都响应式网站开发,dw怎么把手机适应页面变成网页?  如何在IIS7上新建站点并设置安全权限?  魔方云NAT建站如何实现端口转发?  建站主机解析:虚拟主机配置与服务器选择指南  如何快速搭建二级域名独立网站?  建站之星Pro快速搭建教程:模板选择与功能配置指南  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  如何选择高性价比服务器搭建个人网站?  网站制作公司排行榜,抖音怎样做个人官方网站  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  完全自定义免费建站平台:主题模板在线生成一站式服务  香港网站服务器数量如何影响SEO优化效果?  网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?  建站之星安装路径如何正确选择及配置?  电商网站制作价格怎么算,网上拍卖流程以及规则?  c# 服务器GC和工作站GC的区别和设置  官网建站费用明细查询_企业建站套餐价格及收费标准指南  如何快速建站并高效导出源代码?  如何快速搭建高效WAP手机网站?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗  建站主机选购指南与交易推荐:核心配置解析  建站之星如何防范黑客攻击与数据泄露?  如何快速生成橙子建站落地页链接?  简单实现Android验证码 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。