直到今天,我一直在想,当您以DelegateCommand
的执行方法绑定到async
时,WPF确实是以async
的方式做到这一点。
但是根据我得到的一些测试,以及这篇博客文章:http://brianlagunas.com/prism-delegatecommand-fromasynchandler-is-obsolete/从来没有这样。
我们最近开始实现应用程序,并且确实开始使用await / async模式。我们认为这是使用await
/ async
并具有响应式应用程序的好方法。
所以我的问题是:我们可以在命令处理程序中使用(最重要的是,好处)异步/等待吗?
例如:
public class SomeViewModel
{
public DelegateCommand SomeSpecificCommand { get; set; }
public SomeViewModel(){
SomeSpecificCommand = new DelegateCommand(DoSomeWorkAsync);
}
private async void DoSomeWorkAsync()
{
await DoSomeLongRunningJob();
//Update the GuiWithSomething
}
}
从技术上讲,它可以编译,但是:
CompositeCommand
,则复合命令不会等待DelegateCommand
的结果答案 0 :(得分:0)
我们可以在命令处理程序中使用(最重要的是,好处)异步/等待吗?
是的,只要您的命令是一劳永逸的。
问题更多的是测试而不是生产:如何使用不知道何时完成的命令测试视图模型?
一种选择是使用内部/公共方法“污染”您的视图模型,这些方法实际上是命令,但是暴露了异步特性,以便您的测试等待它们。
另一种方法是反映到DelegateCommand
实例中,以掌握测试中的异步处理程序。
第三,您可以在DelegateCommand
的启发下提供自己的命令实现,但可以提供对异步处理程序的(test-)访问。