ad

在没有视野的视野模型中处理异常(在ReactiveUI中)-英雄云拓展知识分享

匿名投稿 259 2024-01-22

我至今为止正在使用ReactiveUI在C#中构造一个利用程序,其中包括许多视野/视野模式。这些视野模型中的一些以预设间隔履行网络要求。这些网络要求可能随即失败。我实行了以下:

public ReactiveCommand<Unit, IReactiveList<IJob>> RefreshJobList { get; }

public Interaction<Exception, Unit> RefreshError { get; } = new Interaction<Exception, Unit>();

在没有视野的视野模型中处理异常(在ReactiveUI中)-英雄云拓展知识分享

...

RefreshJobList = ReactiveCommand.CreateFromTask(() => DoNetworkRequest());

RefreshJobList.ThrownExceptions.Subscribe(ex =>

{

log.Error("Failed to retrieve job list from server.", ex);

RefreshError.Handle(ex).Subscribe();

});

Observable.Interval(TimeSpan.FromMilliseconds(300)).Select(x => Unit.Default).InvokeCommand(RefreshJobList);

在相应的视野中,我处理异常以下:

this.WhenActivated(d => d(

this.ViewModel.RefreshError.RegisterHandler(interaction =>

{

MessageBox.Show("Failed to load joblist.", "Error", MessageBoxButton.OK);

interaction.SetOutput(new Unit());

})

));

这可以正常工作,除非ViewModel与视野不关联。我的利用程序使用选项卡,当用户切换到其他选项卡时,上一个视野将被破坏。这使ViewModel正在运行,仍在提出要求,没有视野。然后,产生毛病 RefreshJobList,没有处理程序与 RefreshError,reactiveui抛出 UnhandledInteractionError 我的利用程序崩溃了。

我不肯定如何干净地处理。我的第一个想法是暂停ViewModel,直到连接视野为止,这也能够节省网络流量。但是,我仿佛没法检查是不是将视野附加到ViewModel上。有任何想法吗?

看答案

解决方案的关键是使用 WhenActivated, 受供于 ISupportsActivation 在ViewModel上。

我现在正在使用De ViewModel中的以下代码:

public class ViewModel : ReactiveObject, ISupportsActivation

public ViewModelActivator Activator { get; } = new ViewModelActivator();

public ReactiveCommand<Unit, IReactiveList<IJob>> RefreshJobList { get; }

public Interaction<Exception, Unit> RefreshError { get; } = new Interaction<Exception, Unit>();

...

public ViewModel(){

RefreshJobList = ReactiveCommand.CreateFromTask(() => DoNetworkRequest());

RefreshJobList.ThrownExceptions.Subscribe(ex =>

{

log.Error("Failed to retrieve job list from server.", ex);

RefreshError.Handle(ex).Subscribe();

});

this.WhenActivated(d => d(

Observable.Interval(TimeSpan.FromMilliseconds(300)).Select(x => Unit.Default).InvokeCommand(RefreshJobList)

));

}

}

这很好。


🚀🌟 点击注册 免费试用超级应用平台-英雄云企业级hpapaas 🌟🚀 😃👉🌐

免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

标签:C# WPF
上一篇:内部表未从表控件中修改-英雄云拓展知识分享
下一篇:在WPF中利用Live Property Explorer的更改-英雄云拓展知识分享
相关文章
×