C# 4.0 被动扩展只处理一次事件

C# 4.0 被动扩展只处理一次事件,c#-4.0,event-handling,system.reactive,C# 4.0,Event Handling,System.reactive,如果我需要处理某个事件,我通常会这样编码: // part of browser UrlEventHandler docReadyDelegate = null; var documentReady = new UrlEventHandler((sender, args) => { view.DocumentReady -= docReadyDelegate;

如果我需要处理某个事件,我通常会这样编码:

            // part of browser

            UrlEventHandler docReadyDelegate = null;
            var documentReady = new UrlEventHandler((sender, args) =>
            {
                view.DocumentReady -= docReadyDelegate; // unsubscribe
                // some code here. Fired then browser's document is ready!
            });

            docReadyDelegate = documentReady;
            view.DocumentReady += docReadyDelegate; // subscribe

            view.Navigate("http://google.com");
但正如我所认为的那样,它既不完美也不美丽。我知道可以使用反应式扩展一次性处理事件。怎么做?

试试这个:

    Observable
        .FromEventPattern<UrlEventHandler, UrlEventArgs>(
            h => view.DocumentReady += h, 
            h => view.DocumentReady -= h)
        .Take(1)
        .Subscribe(se =>
        {
            /* code run only once */
        });
可观察
.FromEventPattern(
h=>view.DocumentReady+=h,
h=>view.DocumentReady-=h)
.采取(1)
.订阅(se=>
{
/*代码只运行一次*/
});
由于
.Take(1)
的原因,它将只触发一次,并且它将很好地处理事件处理程序的所有附加和分离