我正在尝试使用反应式扩展编写代码来处理异步调用,其中启动方法和完成的事件都是静态的。我不能使用
var languageSetsLoaded = Observable
.FromEvent<LoadLanguageSetsCompletedEventArgs>(
LanguageManager, "LanguageSetsLoaded")
由于 LanguageManager 是一个静态类而不是一个实例,所以我尝试了
var languageSetsLoaded = Observable
.FromEvent<LoadLanguageSetsCompletedEventArgs>(
h => LanguageManager.LanguageSetsLoaded += h,
h => LanguageManager.LanguageSetsLoaded -= h )
但这会产生语法错误“无法将 lambda 表达式转换为类型‘object’,因为它不是委托类型”。该事件如此声明
public delegate void LoadLanguageSetsCompletedHandler(LoadLanguageSetsCompletedEventArgs e);
public static event LoadLanguageSetsCompletedHandler LanguageSetsLoaded = delegate { };
所以我认为它是一个委托类型,也许它是静态的这一事实会产生误导性的错误描述。
他们是否有某种方法可以做到这一点,或者我只是必须坚持这样的非反应性代码?
private void ChangeLanguage(string languageCode)
{
LanguageManager.LanguageSetsLoaded += OnLanguageSetsLoaded;
LanguageManager.LoadLanguageSets(languageCode, BaseApp.InTranslationMode);
}
private void OnLanguageSetsLoaded(LoadLanguageSetsCompletedEventArgs e)
{
LanguageManager.LanguageSetsLoaded -= OnLanguageSetsLoaded;
OnPropertyChanged("DummyLanguageResource");
}