gpt4 book ai didi

c# - 如何将 Observable.FromEvent 与静态事件一起使用?

转载 作者:行者123 更新时间:2023-11-30 22:44:55 27 4
gpt4 key购买 nike

我正在尝试使用 Reactive Extensions 编写代码来处理异步调用,其中启动方法和完成的事件都是静态的。我不会用

var languageSetsLoaded = Observable
.FromEvent<LoadLanguageSetsCompletedEventArgs>(
LanguageManager, "LanguageSetsLoaded")

因为 LanguageManager 是静态类而不是实例,所以我尝试了

var languageSetsLoaded = Observable
.FromEvent<LoadLanguageSetsCompletedEventArgs>(
h => LanguageManager.LanguageSetsLoaded += h,
h => LanguageManager.LanguageSetsLoaded -= h )

但这给出了语法错误“无法将 lambda 表达式转换为类型‘object’,因为它不是委托(delegate)类型”。事件是这样声明的

public delegate void LoadLanguageSetsCompletedHandler(LoadLanguageSetsCompletedEventArgs e);
public static event LoadLanguageSetsCompletedHandler LanguageSetsLoaded = delegate { };

所以我认为它是一个委托(delegate)类型,也许它是静态的这一事实产生了误导性的错误描述。

他们有什么方法可以做到这一点,还是我必须坚持使用这样的非 react 性代码?

private void ChangeLanguage(string languageCode)
{
LanguageManager.LanguageSetsLoaded += OnLanguageSetsLoaded;
LanguageManager.LoadLanguageSets(languageCode, BaseApp.InTranslationMode);
}

private void OnLanguageSetsLoaded(LoadLanguageSetsCompletedEventArgs e)
{
LanguageManager.LanguageSetsLoaded -= OnLanguageSetsLoaded;
OnPropertyChanged("DummyLanguageResource");
}

最佳答案

我认为问题在于您的事件的委托(delegate)类型。尝试将其更改为:

public static event EventHandler<LoadLanguageSetsCompletedEventArgs> 
LanguageSetsLoaded = delegate { };

如果您查看您尝试使用的 Observable.FromEvent 的签名,它看起来像这样:

public static IObservable<IEvent<TEventArgs>> FromEvent<TEventArgs>(
Action<EventHandler<TEventArgs>> addHandler,
Action<EventHandler<TEventArgs>> removeHandler
)
where TEventArgs : EventArgs

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

关于c# - 如何将 Observable.FromEvent 与静态事件一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3274815/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com