有人可以帮我解决这个问题吗?我已经尝试了一切。 我通常知道如何解决该问题,但不知道如何使用匿名方法。 DelegateCommand 有 2 个构造函数。
1)公共(public)DelegateCommand(操作executeMethod)
2)public DelegateCommand(ActionexecuteMethod,FunccanExecute)。
我想知道是否有可能删除该警告。需要异步和等待,否则我的方法: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()
{
}
...
最佳答案
async wait 仅与 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 引发的任何异常都不会被注意到
或使用支持异步函数的更好的委托(delegate)命令。就我个人而言,我喜欢 Nito.Mvvm.Async 中的 AsyncCommand NuGet 包由 Stephen Cleary 编写.
...
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,这样除非操作完成,否则用户无法重复单击。
关于c# - 异步方法 'anonymous' 不应返回 void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46353690/