2017-09-21 108 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

非常感謝你給出了非常好的解釋。 –