gpt4 book ai didi

c# - ReactiveUI 7.0 交互处理程序从未调用过

转载 作者:行者123 更新时间:2023-11-30 21:39:57 24 4
gpt4 key购买 nike

因此,我正在学习将 ReactiveUI 7.4 与 winforms 一起使用,并且我认为在我尝试包含用于显示错误弹出窗口的 Interactions 之前我获得了相当不错的体验:

View 模型

public class ViewModel : ReactiveObject
{
[...]

public ViewModel()
{
GetCmd = ReactiveCommand.CreateFromTask(
_ => myAsyncFunc(),
CanGetCmd
);

GetCmd.ThrownExceptions
.Subscribe(ex => Interactions.Errors.Handle(ex)); <- breakpoint correctly breaks in there
}
}

互动

public static class Interactions
{
public static readonly Interaction<Exception, Unit> Errors = new Interaction<Exception, Unit>();
}

查看

public ViewCtor()
{
[viewmodel declaration...]

this.btnGet.Events().Click
.Select(_ => Unit.Default)
.InvokeCommand(this, x => x.ViewModel.GetCmd);

Interactions.Errors.RegisterHandler(interaction =>
{
_popupManager.Show(interaction.Input.Message, "Arf !"); <- but breakpoint never hits here :(
});
}

基本上在调试中,断点在 Handle 声明中命中,但从不在 RegisterHandler 函数中命中。

我可能遗漏了一些东西,因为来自 interactions 上的 ReactiveUI 文档,如果我没有设置任何 RegisterHandler(我试过),我应该得到一个 UnhandledInteractionException 并且我什至没有得到这个异常......

如果给定交互没有处理程序,或者没有处理程序设置结果,则交互本身被视为未处理。在这种情况下,Handle 的调用将导致抛出 UnhandledInteractionException。

(我还使用 reactiveui-events-winforms 来更好地连接事件语法)

最佳答案

Interactions.Errors.Handle(ex) 返回一个冷的可观察对象,即在您订阅它之前它实际上不会做任何事情。这应该有效:

GetCmd.ThrownExceptions
.Subscribe(ex => Interactions.Errors.Handle(ex).Subscribe());

(您可能需要添加 using System;。)

关于c# - ReactiveUI 7.0 交互处理程序从未调用过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44914336/

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