2017-09-21 105 views
-1

有人可以帮我解决这个问题我尝试了一切。 我通常知道如何解决这个问题,但不是使用匿名方法。 DelegateCommand有2个构造函数。异步方法'匿名'不应该返回无效

1)公共DelegateCommand(动作executeMethod)

2)公共DelegateCommand(动作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

您需要向我们展示DelegateCommand的构造函数的签名。最有可能的是,你正在创建一个“async void”函数,因为DelegateCommand不包含一个接受'Func '的构造函数。只要做'新的DelegateCommand(enterButtonClicked)',它应该更明显是什么问题。 –

+0

它有两个构造函数1)public DelegateCommand(Action executeMethod)和2)public DelegateCommand(Action executeMethod,Func canExecute)。我想知道是否有可能如何删除该警告。异步和等待需要,否则我的方法:enterButtonClicked();将同步呼叫。 –

回答

1

异步等待只与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募集的资金将被忽视

或使用支持异步功能不如授人命令的任何异常。我个人喜欢Stephen Cleary编写的Nito.Mvvm.Async 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。

+0

非常感谢你给出了非常好的解释。 –