[英]How to create IObservable from delegate that does not inherit from EventHandler?
[英]How to create IObservable from delegate?
這段代碼:
// NOTE: IQuote DOES NOT inherit from EventArgs
public interface IQuote// : EventArgs
{
}
class C
{
//NOTE, this is NOT public event EventHandler<IQuote> QuoteChangeEvent;
public delegate void QuoteChangeEvent(IQuote q);
}
var c = new C();
c.OnQuoteChange += ProcessQuoteChange;
public static void ProcessQuoteChange(IQuote q)
{
}
工作正常。 現在我想使用Rx
。 這是行不通的,即甚至無法編譯:
var priceChangedObservable = Observable.FromEvent<QuoteChangeEvent, QuoteChangeEvent>(
(handler) =>
{
QuoteChangeEvent quoteHandler = (e) => handler(e);
},
eh => c.OnQuoteChange += eh,
eh => c.OnQuoteChange -= eh
);
上線(handler) =>
- "Severity Code Description Project File Line Suppression State
Error CS1643 Not all code paths return a value in lambda expression
of type 'Func<Action<QuoteChangeEvent>,
QuoteChangeEvent>' 294 Active"
在handler(e)
錯誤CS1503參數1:無法從“ IQuote”轉換為“ QuoteChangeEvent” 296有效
從delegate
創建IObservable
的正確方法是什么?
使用Observable.FromEvent<TDelegate, TEventArgs>
,應傳遞<QuoteChangeEvent, IQuote>
:
var priceChangedObservable = Observable.FromEvent<QuoteChangeEvent, IQuote>(
handler =>
{
QuoteChangeEvent quoteHandler = (e) => { handler(e); };
return quoteHandler;
},
eh => c.OnQuoteChange += eh,
eh => c.OnQuoteChange -= eh
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.