I am trying to use Reactive Extensions to write code to handle an asynchronous call, where both the initiating method and the completed event are static. I can not use
var languageSetsLoaded = Observable .FromEvent<LoadLanguageSetsCompletedEventArgs>( LanguageManager, "LanguageSetsLoaded")
since LanguageManager is a static class, not an instance, so I tried
var languageSetsLoaded = Observable .FromEvent<LoadLanguageSetsCompletedEventArgs>( h => LanguageManager.LanguageSetsLoaded += h, h => LanguageManager.LanguageSetsLoaded -= h )
but it gives a syntax error "It is not possible to convert a lambda expression to an object type because it is not a delegate type." Event is declared in this way
public delegate void LoadLanguageSetsCompletedHandler(LoadLanguageSetsCompletedEventArgs e); public static event LoadLanguageSetsCompletedHandler LanguageSetsLoaded = delegate { };
therefore, I believe that this is the type of delegate, and perhaps the fact that it is static creates an erroneous description of the error.
Is this their way of doing this, or will I just have to stick with non-reactive code like this?
private void ChangeLanguage(string languageCode) { LanguageManager.LanguageSetsLoaded += OnLanguageSetsLoaded; LanguageManager.LoadLanguageSets(languageCode, BaseApp.InTranslationMode); } private void OnLanguageSetsLoaded(LoadLanguageSetsCompletedEventArgs e) { LanguageManager.LanguageSetsLoaded -= OnLanguageSetsLoaded; OnPropertyChanged("DummyLanguageResource"); }
source share