2011-05-10 94 views
5

我試圖在實驗室中使用被動擴展手,但無法使用FromEvent API註冊(我正在獲取編譯時異常)。我想在文本框控件上調用textchanged屬性時接收事件,有人可以建議我通過FromEvent API進行轉換時做了什麼錯誤嗎?我一些如何不能從TextChangeEventArgs/EventHandler類型轉換或轉換爲EventHandler - 請告訴我正確的方法來做到這一點。謝謝。Reactive Extension - Observable.FromEvent typecast轉換

 internal delegate void TextChangedEventArgs(object sender, EventArgs e); 
     var txt = new TextBox(); 

     var form = new Form 
         { 
          Controls = { txt } 
         }; 


     var subscription = Observable.FromEvent<EventHandler, TextChangedEventArgs>(
      x => (a, b) => new EventHandler(), ?????? 
      x => txt.TextChanged += x, 
      x => txt.TextChanged -= x 
      ); 

     IDisposable eventSubscription = subscription.Subscribe(
      x => Console.WriteLine("Subscriber Got " + x), 
      x => Console.WriteLine("An exception has occured" + x), 
      () => Console.WriteLine("Action completed")); 

     Console.WriteLine("in here"); 
     using (new CompositeDisposable(eventSubscription)) { Application.Run(form); } 

     Console.ReadKey(); 

回答

11

試試這個:

var subscription = Observable.FromEventPattern<TextChangedEventArgs>(txt, "TextChanged"); 
+0

我在MSDN文檔中找到了我的解決方案'Microsoft.Phone.Reactive'命名空間。 RX-Team似乎經常在其API中改變這種情況。謝謝你的提示。 – Nappy 2011-05-13 14:41:57

3

嘗試:

var subscription = Observable.FromEvent(h => txt.TextChanged += h, 
             h => txt.TextChanged -= h); 
+0

我正在使用基於控制檯的應用程序和使用Windows.Form DLL /名稱空間,TextChangedEventHandler是一個WPF演示文稿委託,有沒有辦法我可以做到這一點與WinForm? – 2011-05-10 12:55:50

+0

@Rohit夏爾馬 - 看我修改的示例爲WinForms文本框 – 2011-05-10 14:23:37

+2

謝謝詹姆斯 - 我以前試過,但我得到編譯時錯誤 「不能隱式轉換類型System.Action到System.EventHandler」 – 2011-05-10 14:50:16

0

試試這個(編輯:如果你的目標Windows Phone Reactive API):

var subscription = Observable.FromEvent<TextChangedEventArgs>(txt, "TextChanged"); 
+1

我在最近一次下載的RX庫中看不到這個過載 – 2011-05-10 13:31:21

+3

它改名爲FromEventPattern – Schneider 2011-07-27 07:50:07