Heim  >  Artikel  >  Backend-Entwicklung  >  C# implementiert einfachen Code zur Überbrückung mit vorhandenen .NET-Ereignissen

C# implementiert einfachen Code zur Überbrückung mit vorhandenen .NET-Ereignissen

黄舟
黄舟Original
2017-03-16 11:55:151381Durchsuche

In diesem Artikel werden hauptsächlich die relevanten Informationen von C# vorgestellt, um einfache Beispiele für die Überbrückung mit dem vorhandenen .NETEvent zu implementieren. Freunde in Not können sich auf

C# implementiert ein einfaches Beispiel für die Überbrückung vorhandener .NET-Ereignisse

Rx bietet Factory-Methoden zur Überbrückung vorhandener asynchroner Quellen in .NET, sodass Sie diese von jeder Art von Rich-Datenstrom verwenden können Kombinations-, Filter- und Ressourcenverwaltungsfunktionen. In diesem Thema wird der FromEventPattern

Operator untersucht, der es ermöglicht, .NET-Ereignisse als beobachtbare Sequenz in Rx zu „importieren“. Jedes Mal, wenn ein Ereignis ausgelöst wird, wird eine OnNext-Nachricht an die beobachtbare Sequenz übermittelt. Anschließend können Sie die Ereignisdaten wie jede andere beobachtbare Sequenz verarbeiten.

Rx ist nicht dazu gedacht, bestehende asynchrone

Programmiermodelle wie .NET-Ereignisse, asynchrone Muster oder aufgabenparallele Bibliotheken zu ersetzen. Wenn Sie jedoch versuchen, Ereignisse zu schreiben, bieten Ihnen die Factory-Methoden von Rx Annehmlichkeiten, die Sie in Ihrem aktuellen Programmiermodell nicht finden. Dies gilt insbesondere für die Ressourcenpflege (z. B. den Zeitpunkt der Abmeldung) und die Filterung (z. B. Auswahl der zu empfangenden Datentypen). In diesem und den folgenden Themen erfahren Sie, wie diese Rx-Funktionen Ihnen bei der asynchronen Programmierung helfen können.

Konvertieren Sie .NET-Ereignisse in beobachtbare Rx-Sequenzen

Das folgende Beispiel erstellt ein einfaches .NET-

Ereignishandlerprogramm für Mausbewegungsereignisse und druckt es aus die Mausposition in der Beschriftung eines Windows Forms.

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);
  }; 
}
Um Ereignisse in Rx zu importieren, können Sie den FromEventPattern-Operator verwenden und das EventArgs

-Objekt bereitstellen, das von dem Ereignis ausgelöst wird, das Sie überbrücken möchten. Der FromEventPattern-Operator wird zum Empfangen von Ereignissen vom Absender des Objekts und einigen EventArgs verwendet und nutzt Reflektion, um diese Add/Remove-Methoden für Sie zu finden. Anschließend wird das angegebene Ereignis in eine beobachtbare Sequenz vom Typ EventPattern konvertiert, die die Absender- und Ereignisparameter erfasst.

Für Proxys mit einem Argument (einem nicht standardmäßigen Ereignis) können Sie den FromEvent

-Operator verwenden, der ein Paar Funktionen erfordert. Im folgenden Beispiel konvertieren wir einen Windows Forms-Mausbewegungs-Ereignisstrom in eine beobachtbare Sequenz. Abonnenten erhalten jedes Mal eine OnNext-Benachrichtigung, wenn das Mausbewegungsereignis ausgelöst wird. Wir können dann den EventArgs-Wert einer solchen Benachrichtigung überprüfen und die Position der Mausbewegung ermitteln.

Beachten Sie, dass in diesem Beispiel „move“ zu einer beobachtbaren Sequenz wird, die wir weiter manipulieren können. Das Thema
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);
  }; 
}
Abfragen

beobachtbarer Sequenzen mithilfe von LINQ-Operatoren zeigt Ihnen, wie Sie diese Sequenz in eine Sammlung von Punkttypen projizieren und ihren Inhalt filtern, sodass Ihre Anwendung nur Werte empfängt, die bestimmte Bedingungen erfüllen. Die Bereinigung des Event-Handlers übernimmt das IDisposable-Objekt, das von der Subscribe-Methode zurückgegeben wird. Durch den Aufruf von Dispose (in diesem Beispiel durch Erreichen des Endes des Use-Blocks) werden alle von der Sequenz verwendeten Ressourcen einschließlich des zugrunde liegenden Event-Handlers freigegeben. Dies bedeutet im Wesentlichen, dass Sie sich in Ihrem Namen von der Veranstaltung abmelden.

Das obige ist der detaillierte Inhalt vonC# implementiert einfachen Code zur Überbrückung mit vorhandenen .NET-Ereignissen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn