如何将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 

或者你可以使用有三个参数的重载,第一个是转换处理程序 – 但我认为你最好只更改事件签名,如果可能的话。