最近のReactive ExtensionsにはToEventというのがあるのを知りました(via Reactive Extensions再入門 その15「To*****系メソッド」 – かずきのBlog@Hatena)。調べてみるとToEventPatternがあることも分かりました。「これってもしかしてIObservable<T>から.NETのイベントを発行するのに使えるのではないか」と思い、早速試してみたところうまくいきました。
class Program { static void Main() { var t = new Test(); t.Hoge += (sender, e) => Console.WriteLine("Hoge event!"); t.FireHoge(); t.FireHoge(); } } class Test { public Test() { ee = se.Select(e => new EventPattern<EventArgs>(this, e)).ToEventPattern(); } public void FireHoge() { se.OnNext(EventArgs.Empty); } readonly Subject<EventArgs> se = new Subject<EventArgs>(); readonly IEventPatternSource<EventArgs> ee; public event EventHandler<EventArgs> Hoge { add { ee.OnNext += value; } remove { ee.OnNext -= value; } } } |
内部ではRxガンガン使うけど、表向きには.NETのイベントとして公開したいという場合に便利ですね。Windows Phone標準搭載のAPIにもこれ欲しかったです。
参考: Observable.ToEventPattern(TEventArgs) Method (System.Reactive.Linq) (MSDN Library)
スポンサード リンク |