如何将Observable.FromEvent与静态事件一起使用?
我正在尝试使用Reactive Extensions编写代码来处理异步调用,其中启动方法和已完成事件都是静态的。 我不能用
var languageSetsLoaded = Observable .FromEvent( LanguageManager, "LanguageSetsLoaded")
因为LanguageManager是一个静态类而不是一个实例,所以我试过了
var languageSetsLoaded = Observable .FromEvent( h => LanguageManager.LanguageSetsLoaded += h, h => LanguageManager.LanguageSetsLoaded -= h )
但是这会产生语法错误“无法将lambda表达式转换为类型’对象’,因为它不是委托类型”。 事件就这样宣布了
public delegate void LoadLanguageSetsCompletedHandler(LoadLanguageSetsCompletedEventArgs e); public static event LoadLanguageSetsCompletedHandler LanguageSetsLoaded = delegate { };
所以我认为它是一个委托类型,也许它是静态的这一事实产生了误导性的错误描述。
他们是否有某种方法可以做到这一点,或者我只是要坚持这样的非react native代码?
private void ChangeLanguage(string languageCode) { LanguageManager.LanguageSetsLoaded += OnLanguageSetsLoaded; LanguageManager.LoadLanguageSets(languageCode, BaseApp.InTranslationMode); } private void OnLanguageSetsLoaded(LoadLanguageSetsCompletedEventArgs e) { LanguageManager.LanguageSetsLoaded -= OnLanguageSetsLoaded; OnPropertyChanged("DummyLanguageResource"); }
我认为问题是你的事件的委托类型。 尝试将其更改为:
public static event EventHandler LanguageSetsLoaded = delegate { };
如果你看一下你试图使用的Observable.FromEvent
的签名,它看起来像这样:
public static IObservable> FromEvent( Action> addHandler, Action> removeHandler ) where TEventArgs : EventArgs
或者你可以使用有三个参数的重载,第一个是转换处理程序 – 但我认为你最好只更改事件签名,如果可能的话。