2011-05-10 75 views
1

爲什麼rx沒有注意到事件?事件不會在它發生時處理,因此對象的內部狀態未更新,並在接收到的以下事件中導致問題。 它可能是由於ObserveOnNewThread?無功擴展(Rx)未命中事件

private void UpdateList(Client client) 
{ 
    var listUpdateReceive = Observable 
     .FromEvent<ListEventArgs>(ev => client.ListUpdateReceive += ev, ev => client.ListUpdateReceive -= ev); 

    listUpdateReceive.Take(1) 
     .Subscribe(r => 
         { 
          TraceInformation("List is updated."); 

          OnListUpdateReceived(r.Sender, r.EventArgs); 
         }); 
} 

我可以看到事件已收到,但上面的代碼被阻止!

+1

您需要提供一個有效的代碼示例,以便人們可以幫助您。 – Nathan 2011-05-10 07:25:47

+1

它完全取決於你寫的代碼。提供代碼示例將改善問題的質量,並允許其他人查看您可能出錯的地方。目前你的問題太模糊,你不可能得到答案。 – 2011-05-10 07:54:44

回答

1

您的代碼示例對我來說看起來不錯,儘管使用Take(1)運算符將導致只捕獲第一個事件,此時流將完成,您將不會收到任何其他通知。您是否打算只聽單個事件通知?

也許刪除Take(1)會給你正確的行爲?

private void UpdateList(Client client) 
{ 
    var listUpdateReceive = Observable 
     .FromEvent<ListEventArgs>(ev => client.ListUpdateReceive += ev, ev => client.ListUpdateReceive -= ev); 

    listUpdateReceive.Subscribe(r => 
     { 
      TraceInformation("List is updated."); 

      OnListUpdateReceived(r.Sender, r.EventArgs); 
     }); 
} 
+0

問題已解決。阻塞是由於非同步(沒有鎖定)字符串修改。 – 2011-05-10 10:54:21