有人可以帮我解决这个问题我尝试了一切。 我通常知道如何解决这个问题,但不知道如何解决这个问题。 DelegateCommand有2个构造函数。
1)public DelegateCommand(Action executeMethod)
2)public DelegateCommand(Action executeMethod,Func canExecute)。
我想知道是否有可能删除该警告。我需要异步和等待,否则我的方法:enterButtonClicked();将被同步调用。
...
public DelegateCommand EnterButton { get; set; }
public StartPageViewModel()
{
Title = "title_black.png";
PasswordPlaceholder = "Lozinka";
EnterButton = new DelegateCommand( async () => { await enterButtonClicked();}); // <----- I am getting that warning here
}
public async Task enterButtonClicked()
{
}
...
答案 0 :(得分:3)
async await仅与Func<Task>
或Func<Task<T>>
兼容,如果您没有,那么您将拥有不应该执行的“异步空白”。
您的两个选择是不等待任务
...
public DelegateCommand EnterButton { get; set; }
public StartPageViewModel()
{
Title = "title_black.png";
PasswordPlaceholder = "Lozinka";
EnterButton = new DelegateCommand( () => { var temp = enterButtonClicked();});
}
public async Task enterButtonClicked()
{
}
...
这意味着enterButtonClicked引发的任何异常都将被忽视
或使用支持异步函数的更好的委托命令。我个人喜欢Nito.Mvvm.Async编写的Stephen Cleary NuGet包中的AsyncCommand。
...
public AsyncCommand EnterButton { get; set; }
public StartPageViewModel()
{
Title = "title_black.png";
PasswordPlaceholder = "Lozinka";
EnterButton = new DelegateCommand(enterButtonClicked); //you can just use a delegate, no method needed.
}
public async Task enterButtonClicked()
{
}
...
AsyncCommand
委托在任务运行时将CanExecute
设置为false,以便除非操作已完成,否则无法重复点击。