Reactive Extensions を使用して、開始メソッドと完了イベントの両方が静的な非同期呼び出しを処理するコードを記述しようとしています。使えない
var languageSetsLoaded = Observable
.FromEvent<LoadLanguageSetsCompletedEventArgs>(
LanguageManager, "LanguageSetsLoaded")
LanguageManager はインスタンスではなく静的クラスなので、試してみました
var languageSetsLoaded = Observable
.FromEvent<LoadLanguageSetsCompletedEventArgs>(
h => LanguageManager.LanguageSetsLoaded += h,
h => LanguageManager.LanguageSetsLoaded -= h )
ただし、「デリゲート型ではないため、ラムダ式を型 'オブジェクト'に変換できません」という構文エラーが発生します。イベントは次のように宣言されます
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");
}