Observable.FromEvent<TDelegate、 TEventArgs> メソッド (Func<Action<TEventArgs>、TDelegate>、Action<TDelegate>、Action<TDelegate>)
.NET イベントを監視可能なシーケンスに変換します。
Namespace:System.Reactive.Linq
アセンブリ: System.Reactive (System.Reactive.dll)
構文
'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.
型パラメーター
- TDelegate
デリゲートの型。
- TEventArgs
イベントの種類。
パラメーター
- コンバージョン
種類: System.Func<Action<TEventArgs>、TDelegate>
指定されたイベント ハンドラーを、基になる .NET イベントと互換性のあるデリゲートに変換するために使用される関数。 結果のデリゲートは、addHandler および removeHandler アクション パラメーターの呼び出しで使用されます。
- Addhandler
種類: System.Action<TDelegate>
指定されたイベント ハンドラーを基になる .NET イベントにアタッチするアクション。
- removeHandler
種類: System.Action<TDelegate>
基になる .NET イベントから指定されたイベント ハンドラーをデタッチするアクション。
戻り値
種類: System.IObservable<TEventArgs>
基になる .NET イベントの呼び出しのデータ表現を含む監視可能なシーケンス。
解説
FromEvent 演算子は、基になるイベントが発生したときに、基になるイベントに指定されたイベント引数の監視可能なシーケンスを作成します。 FromEvent 演算子は、Action<T> 型のデリゲートでのみ機能します。 そのため、変換関数を使用して、基になる .NET イベントと互換性のあるイベント ハンドラーを作成する必要があります。 このトピックのコード例では、System.IO.FileSystemEventHandler デリゲートと System.IO.RenamedEventHandler デリゲートのこの変換を示します。
例
このコード例では、FromEvent 演算子を使用して、System.IO.FileSystemWatcher で Create、Rename、Delete の各イベントをリッスンする方法を示します。 この例では、C:\Users\Public フォルダーでこれらのイベントを監視します。 FromEvent 演算子は、Action<T> 型のデリゲートのみをサポートします。 したがって、この例では、 変換パラメーターを使用してラムダ式を定義し、System<T> デリゲートを System.IO.FileSystemEventHandler および System.IO.RenamedEventHandler デリゲートに変換します。 イベントは、監視可能な各シーケンスのサブスクリプションを使用して監視されます。 各イベントはコンソール ウィンドウに書き込まれます。
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();
}
}
}
コード例を使用して、次の出力が生成されました。
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.