Aracılığıyla paylaş


Observable.FromEvent<TDelegate, TEventArgs> Yöntemi (Func<Action<TEventArgs>, TDelegate>, Action<TDelegate>, Action<TDelegate>)

Bir .NET olayını gözlemlenebilir bir diziye dönüştürür.

Ad Alanı:System.Reactive.Linq
Derleme: System.Reactive (System.Reactive.dll içinde)

Syntax

'Declaration
Public Shared Function FromEvent(Of TDelegate, TEventArgs) ( _
    conversion As Func(Of Action(Of TEventArgs), TDelegate), _
    addHandler As Action(Of TDelegate), _
    removeHandler As Action(Of TDelegate) _
) As IObservable(Of TEventArgs)
'Usage
Dim conversion As Func(Of Action(Of TEventArgs), TDelegate)
Dim addHandler As Action(Of TDelegate)
Dim removeHandler As Action(Of TDelegate)
Dim returnValue As IObservable(Of TEventArgs)

returnValue = Observable.FromEvent(conversion, _
    addHandler, removeHandler)
public static IObservable<TEventArgs> FromEvent<TDelegate, TEventArgs>(
    Func<Action<TEventArgs>, TDelegate> conversion,
    Action<TDelegate> addHandler,
    Action<TDelegate> removeHandler
)
public:
generic<typename TDelegate, typename TEventArgs>
static IObservable<TEventArgs>^ FromEvent(
    Func<Action<TEventArgs>^, TDelegate>^ conversion, 
    Action<TDelegate>^ addHandler, 
    Action<TDelegate>^ removeHandler
)
static member FromEvent : 
        conversion:Func<Action<'TEventArgs>, 'TDelegate> * 
        addHandler:Action<'TDelegate> * 
        removeHandler:Action<'TDelegate> -> IObservable<'TEventArgs> 
JScript does not support generic types and methods.

Tür Parametreleri

  • Tdelegate
    Temsilcinin türü.
  • Teventargs
    Olayın türü.

Parametreler

  • dönüştürme
    Tür: System.Func<Action<TEventArgs>, TDelegate>
    Verilen olay işleyicisini temel alınan .NET olayıyla uyumlu bir temsilciye dönüştürmek için kullanılan bir işlev. Sonuçta elde edilen temsilci addHandler ve removeHandler eylem parametrelerine yapılan çağrılarda kullanılır.
  • addHandler
    Tür: System.Action<TDelegate>
    Verilen olay işleyicisini temel alınan .NET olayına ekleyen eylem.
  • Removehandler
    Tür: System.Action<TDelegate>
    Verilen olay işleyicisini temel alınan .NET olayından ayıran eylem.

Dönüş Değeri

Tür: System.IObservable<TEventArgs>
Temel alınan .NET olayının çağrılarının veri gösterimlerini içeren gözlemlenebilir dizi.

Açıklamalar

FromEvent işleci, tetiklendiğinde temel olaylarla birlikte sağlanan olay bağımsız değişkenlerinin gözlemlenebilir bir dizisini oluşturur. FromEvent işleci yalnızca Eylem<T> türündeki temsilcilerle çalışır. Bu nedenle, temel alınan .NET olayıyla uyumlu bir olay işleyicisi oluşturmak için dönüştürme işlevi kullanılmalıdır. Bu konudaki örnek kod, System.IO.FileSystemEventHandler ve System.IO.RenamedEventHandler temsilcileri için bu dönüştürmeyi gösterir.

Örnekler

Bu örnek kod, System.IO.FileSystemWatcher üzerindeki Create, Rename ve Delete olaylarını dinlemek için FromEvent işlecini kullanmayı gösterir. Örnek, bu olayları C:\Users\Public klasöründe izler. FromEvent işleci yalnızca Eylem<T> türündeki temsilcileri destekler. Bu örnekte, System T> temsilcisini System.IO.FileSystemEventHandler ve System.IO.RenamedEventHandler<temsilcilerine dönüştürmek üzere bir lambda ifadesi tanımlamak için dönüştürme parametresi kullanılır. Olaylar, gözlemlenebilir dizilerin her birine bir abonelik kullanılarak gözlemlenir. Olayların her biri konsol penceresine yazılır.

using System;
using System.Reactive.Linq;
using System.IO;

namespace Example
{
  class Program
  {
    static void Main()
    {
      //*********************************************************************************************************************//
      //*** Create a FileSystemWatcher to watch the C:\Users\Public directory using the default NotifyFilter watching for ***//
      //*** changes to any type of file.                                                                                  ***//
      //*********************************************************************************************************************//

      FileSystemWatcher fsw = new FileSystemWatcher(@"C:\Users\Public", "*.*");
      fsw.EnableRaisingEvents = true;


      //******************************************************************************************//
      //*** Use the FromEvent operator to setup a subscription to the Created event.           ***//
      //***                                                                                    ***//
      //*** The first lambda expression performs the conversion of Action<FileSystemEventArgs> ***//
      //*** to FileSystemEventHandler. The FileSystemEventHandler just calls the handler       ***//
      //*** passing the FileSystemEventArgs.                                                   ***//
      //***                                                                                    ***//
      //*** The other lambda expressions add and remove the FileSystemEventHandler to and from ***//
      //*** the event.                                                                         ***//
      //******************************************************************************************//

      var fswCreated = Observable.FromEvent<FileSystemEventHandler, FileSystemEventArgs>(handler => 
                                  {
                                    FileSystemEventHandler fsHandler = (sender, e) =>
                                    {
                                      handler(e); 
                                    };

                                    return fsHandler; 
                                  },
                                  fsHandler => fsw.Created += fsHandler,
                                  fsHandler => fsw.Created -= fsHandler);

fswCreated.Subscribe(e => Console.WriteLine("{0} was created.", e.FullPath));


      //******************************************************************************************//
      //*** Use the FromEvent operator to setup a subscription to the Renamed event.           ***//
      //***                                                                                    ***//
      //*** The first lambda expression performs the conversion of Action<RenamedEventArgs>    ***//
      //*** to RenamedEventHandler. The RenamedEventHandler just calls the handler passing the ***//
      //*** RenamedEventArgs.                                                                  ***//
      //***                                                                                    ***//
      //*** The other lambda expressions add and remove the RenamedEventHandler to and from    ***//
      //*** the event.                                                                         ***//
      //******************************************************************************************//

      var fswRenamed = Observable.FromEvent<RenamedEventHandler, RenamedEventArgs>(handler => 
                                  {
                                    RenamedEventHandler fsHandler = (sender, e) =>
                                    {
                                      handler(e); 
                                    };
      
                                    return fsHandler; 
                                  },
                                  fsHandler => fsw.Renamed += fsHandler,
                                  fsHandler => fsw.Renamed -= fsHandler);

      fswRenamed.Subscribe(e => Console.WriteLine("{0} was renamed to {1}.", e.OldFullPath, e.FullPath));


      //******************************************************************************************//
      //*** Use the FromEvent operator to setup a subscription to the Deleted event.           ***//
      //***                                                                                    ***//
      //*** The first lambda expression performs the conversion of Action<FileSystemEventArgs> ***//
      //*** to FileSystemEventHandler. The FileSystemEventHandler just calls the handler       ***//
      //*** passing the FileSystemEventArgs.                                                   ***//
      //***                                                                                    ***//
      //*** The other lambda expressions add and remove the FileSystemEventHandler to and from ***//
      //*** the event.                                                                         ***//
      //******************************************************************************************//

      var fswDeleted = Observable.FromEvent<FileSystemEventHandler, FileSystemEventArgs>(handler =>
                                  {
                                    FileSystemEventHandler fsHandler = (sender, e) =>
                                    {
                                      handler(e);
                                    };
      
                                    return fsHandler;
                                  },
                                  fsHandler => fsw.Deleted += fsHandler,
                                  fsHandler => fsw.Deleted -= fsHandler);

      fswDeleted.Subscribe(e => Console.WriteLine("{0} was deleted.", e.FullPath));
                

      Console.WriteLine("Press ENTER to exit...\n");
      Console.ReadLine();
    }
  }
}

Aşağıdaki çıkış örnek kodla oluşturulmuştur.

Press ENTER to exit...

C:\Users\Public\New Text Document.txt was created.
C:\Users\Public\New Text Document.txt was renamed to C:\Users\Public\TestFile.txt.
C:\Users\Public\TestFile.txt was deleted.

Ayrıca Bkz.

Başvuru

Gözlemlenebilir Sınıf

FromEvent Aşırı Yüklemesi

System.Reactive.Linq Ad Alanı