当前位置: 首页 > 编程语言 > C#

如何将Observable.FromEvent与静态事件一起使用?分享

时间:2023-04-10 19:22:55 C#

如何将Observable.FromEvent与静态事件一起使用?我正在尝试使用ReactiveExtensions编写代码来处理异步调用,其中start方法和完成的事件都是静态的。我不能使用varlanguageSetsLoaded=Observable.FromEvent(LanguageManager,"LanguageSetsLoaded")因为LanguageManager是静态类而不是实例,所以我尝试了varlanguageSetsLoaded=Observable.FromEvent(h=>LanguageManager.LanguageSetsLoaded+=h,h=>LanguageManager.LanguageSetsLoaded-=h)但这会产生语法错误“无法将lambda表达式转换为类型‘object’,因为它不是委托类型”。事件声明如下publicdelegatevoidLoadLanguageSetsCompletedHandler(LoadLanguageSetsCompletedEventArgse);公共静态事件LoadLanguageSetsCompletedHandlerLanguageSetsLoaded=delegate{};所以我认为它是一个委托类型,也许它是静态的这一事实会产生误导性的错误描述。他们有办法做到这一点,还是我只是坚持使用像这样的非反应本机代码?privatevoidChangeLanguage(stringlanguageCode){LanguageManager.LanguageSetsLoaded+=OnLanguageSetsLoaded;LanguageManager.LoadLanguageSets(语言代码,BaseApp.InTranslationMode);}privatevoidOnLanguageSetsLoaded(LoadLanguageSetsCompletedEventArgse){LanguageManager.LanguageSetsLoaded-=OnLanguageSetsLoaded;OnPropertyChanged("DummyLanguageResource");我认为问题是你的事件的委托类型。尝试将其更改为:publicstaticeventEventHandlerLanguageSetsLoaded=delegate{};如果您查看尝试使用的Observable.FromEvent的签名,它看起来像这样:publicstaticIObservable>FromEvent(Action>addHandler,Action>removeHandler)whereTEventArgs:EventArgs或者您可以使用需要三个的重载参数,第一个是转换处理程序——但我认为如果可能的话,你最好只更改事件签名。以上是C#学习教程:HowtouseObservable.FromEventwithstaticevents?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: