Rumah pembangunan bahagian belakang Tutorial C#.Net C#实现与现有.NET事件桥接的简单代码

C#实现与现有.NET事件桥接的简单代码

Mar 16, 2017 am 11:55 AM

这篇文章主要介绍了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);
  }; 
}
Salin selepas log masuk

  要将事件导入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);
  }; 
}
Salin selepas log masuk

  注意,在这个示例中,move变成了一个可观察的序列,我们可以进一步操作。 使用LINQ运算符的查询可观察序列主题将向您展示如何将此序列投影到点类型的集合中并过滤其内容,以便应用程序只接收满足特定条件的值。

  事件处理程序的清理由Subscribe方法返回的IDisposable对象负责。 调用Dispose(通过在此示例中到达use-block的末尾来完成)将释放包括底层事件处理程序的序列正在使用的所有资源。 这本质上是代表您取消订阅活动。

Atas ialah kandungan terperinci C#实现与现有.NET事件桥接的简单代码. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Direktori Aktif dengan C# Direktori Aktif dengan C# Sep 03, 2024 pm 03:33 PM

Panduan untuk Active Directory dengan C#. Di sini kita membincangkan pengenalan dan cara Active Directory berfungsi dalam C# bersama-sama dengan sintaks dan contoh.

Penjana Nombor Rawak dalam C# Penjana Nombor Rawak dalam C# Sep 03, 2024 pm 03:34 PM

Panduan untuk Penjana Nombor Rawak dalam C#. Di sini kita membincangkan cara Penjana Nombor Rawak berfungsi, konsep nombor pseudo-rawak dan selamat.

C# Serialisasi C# Serialisasi Sep 03, 2024 pm 03:30 PM

Panduan untuk Pensirian C#. Di sini kita membincangkan pengenalan, langkah-langkah objek siri C#, kerja, dan contoh masing-masing.

Paparan Grid Data C# Paparan Grid Data C# Sep 03, 2024 pm 03:32 PM

Panduan untuk Paparan Grid Data C#. Di sini kita membincangkan contoh cara paparan grid data boleh dimuatkan dan dieksport daripada pangkalan data SQL atau fail excel.

Corak dalam C# Corak dalam C# Sep 03, 2024 pm 03:33 PM

Panduan kepada Corak dalam C#. Di sini kita membincangkan pengenalan dan 3 jenis Corak teratas dalam C# bersama-sama dengan contoh dan pelaksanaan kodnya.

Nombor Perdana dalam C# Nombor Perdana dalam C# Sep 03, 2024 pm 03:35 PM

Panduan Nombor Perdana dalam C#. Di sini kita membincangkan pengenalan dan contoh nombor perdana dalam c# bersama dengan pelaksanaan kod.

Faktorial dalam C# Faktorial dalam C# Sep 03, 2024 pm 03:34 PM

Panduan untuk Faktorial dalam C#. Di sini kita membincangkan pengenalan kepada faktorial dalam c# bersama-sama dengan contoh dan pelaksanaan kod yang berbeza.

Perbezaan antara multithreading dan asynchronous C# Perbezaan antara multithreading dan asynchronous C# Apr 03, 2025 pm 02:57 PM

Perbezaan antara multithreading dan asynchronous adalah bahawa multithreading melaksanakan pelbagai benang pada masa yang sama, sementara secara tidak sengaja melakukan operasi tanpa menyekat benang semasa. Multithreading digunakan untuk tugas-tugas yang berintensifkan, sementara asynchronously digunakan untuk interaksi pengguna. Kelebihan multi-threading adalah untuk meningkatkan prestasi pengkomputeran, sementara kelebihan asynchronous adalah untuk tidak menghalang benang UI. Memilih multithreading atau asynchronous bergantung kepada sifat tugas: tugas-tugas intensif pengiraan menggunakan multithreading, tugas yang berinteraksi dengan sumber luaran dan perlu menyimpan respons UI menggunakan asynchronous.

See all articles