2014-10-09 55 views
3

如果我需要一個處理一些事件,我通常這樣的代碼:無擴展處理事件一次

  // 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"); 

但是,因爲我認爲它不是最佳的,而不是美麗。我知道可以使用Reactive Extensions來處理事件一次。怎麼樣?

回答

5

試試這個:

Observable 
     .FromEventPattern<UrlEventHandler, UrlEventArgs>(
      h => view.DocumentReady += h, 
      h => view.DocumentReady -= h) 
     .Take(1) 
     .Subscribe(se => 
     { 
      /* code run only once */ 
     }); 

這將觸發.Take(1)的只有一次,因爲它將所有的事件處理程序的安裝和拆卸處理很好。

+0

非常感謝! – user2598575 2014-10-09 19:04:27