如果我需要处理某个事件,我通常会这样编码:
// 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来处理事件一次。怎么样?
答案 0 :(得分:6)
试试这个:
Observable
.FromEventPattern<UrlEventHandler, UrlEventArgs>(
h => view.DocumentReady += h,
h => view.DocumentReady -= h)
.Take(1)
.Subscribe(se =>
{
/* code run only once */
});
由于.Take(1)
,它只会触发一次,它将很好地处理事件处理程序的所有附加和分离。