我已经开始学习使用Xamarin Forms和MvvmCross进行一些移动开发。
以最简单的形式,我有一个包含按钮的应用程序。点击此按钮后,它将通过rest服务调用api,并通过消息传递服务返回数据。
使用ICommand.Execute(object)模式时,显示对话框(ACR)时遇到问题。我假设这是因为此模式下的执行不是异步的,因此阻塞了主ui线程?这是我正在做的事情的一个示例:
var cmd = Command.Create(CmdType.Login);
cmd.Execute(User);
请直接参考MvvmCross文档中的以下几行内容进行异步操作。
MyCommand = new MvxCommand(() => MyTaskNotifier = MvxNotifyTask.Create(() => MyMethodAsync(), onException: ex => OnException(ex)));
private async Task MyMethodAsync()
{
await _someService.DoSomethingAsync();
// ...
}
在这种情况下,我的DoSomething()不是aysnc-如果有任何异步无效或否定的意思。为了解决这个问题,我已经从MvxCommand更新为MvxAsyncCommand,然后必须使用创可贴来显示对话框。
await Task.Delay(300);
或
await Task.Run(() => { command.Execute(User); }).ConfigureAwait(false);
在这一点上,我显然在质疑命令模式的使用。我错过了一个简单的修复程序,还是选择了一种不合适的体系结构?任何指导表示赞赏。
答案 0 :(得分:0)
您可以像这样使用它
public ICommand YourCommand => new Command(async () => await YourActionAsync());