2017-09-21 16 views
-1

誰かがこの問題を解決するのに役立つことがあります。 私は通常、この問題を解決する方法を知っていますが、匿名の方法では解決できません。 DelegateCommandには2つのコンストラクタがあります。非同期メソッド 'anonymous'はvoidを返しません。

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のコンストラクタの署名を表示する必要があります。おそらく、DelegateCommandに 'Func 'を取り込むコンストラクタが含まれていないため、 "非同期void"関数を作成している可能性があります。ちょうど '新しいDelegateCommand(enterButtonClicked)'を実行して、問題が何であるかをより明白にする必要があります。 –

+0

これは、1)public DelegateCommand(execute executeMethod)と2)public DelegateCommand(execute executeMethod、Func canExecute)の2つのコンストラクタを持ちます。私はその警告を取り除く方法がいくつか可能であることを知りたい。非同期と待機が必要な場合は、私のメソッド:enterButtonClicked();同期的に呼び出されます。 –

答えて

1

はその後、あなたがやるべきではない「非同期無効」と考えているものはありますが、それを持っていない場合Func<Task>またはFunc<Task<T>>とのみ互換性があります。

あなたの2つのオプションがenterButtonClickedによって発生した例外が見過ごさ

に行くか、非同期機能をサポートして、より良いデリゲートコマンドを使用することを意味タスク

... 
public DelegateCommand EnterButton { get; set; } 

public StartPageViewModel() 
{ 
    Title = "title_black.png"; 
    PasswordPlaceholder = "Lozinka"; 

    EnterButton = new DelegateCommand(() => { var temp = enterButtonClicked();}); 
} 

public async Task 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デリゲートはfalseにCanExecuteを設定します。

+0

ありがとう、とても良い説明です。 –

関連する問題