2013-02-14 36 views
0

是否有相當於RX的CancelEventArg?我已更新存儲庫中的事件,並在保存之前觸發。我檢索InvocationList並遍歷每個EventHandler以檢查取消標誌是否設置爲中止保存。我是RX新手,從觀看關於Observable vs Events的RX研討會http://channel9.msdn.com/Series/Rx-Workshop/Rx-Workshop-Observables-versus-Events我想知道如何用Subject替換EventHandler,並知道其中一個訂戶是否取消該事件。RX和CancelEventArg

如果我不能將事件轉換爲Subject,是否有一種方法可以獲取EventHandler的Observable,並在OnNext中獲取EventHandler調用中的sender和CancelEventArgs的訪問權限?

+0

儘管您可以編寫允許停止向訂閱者發送通知的主題,但不建議這樣做。尋找一種替代方法來模擬問題而不會產生可變性。 – Asti 2013-02-20 09:39:33

回答

0

使用Observable.FromEvent,您可以訪問事件參數,例如,這裏:

IObservable<Key> keyPress = 
    Observable.FromEvent<KeyEventArgs>(Application.Current.RootVisual, "KeyUp") 
     .Select(ev => ev.EventArgs.Key); 

所以你應該能夠設置事件參數中的任何屬性的值。

請注意,您在這裏有一個設計問題:取消是您在正常情況下應該已經注意的事情,但混合可取消事件和異步執行路徑可能會在稍後變成維護噩夢。在這裏使用生產者 - 消費者模式並將其視爲單向溝通:您對事件做出反應,您不應該改變它。如果您需要更改它,請使用過濾器(通過Rx實用程序方法)。