2017-09-21 3 views
-1

Kann jemand mir helfen, dieses Problem zu lösen Ich habe alles versucht. Ich weiß normalerweise, wie man dieses Problem löst, aber nicht mit anonymer Methode. DelegateCommand hat 2 Konstruktoren.Asynchrone Methode 'anonymous' sollte nicht void zurückgeben

1) öffentlicher DelegateCommand (Aktion executeMethod)

2) öffentlicher DelegateCommand (Aktion executeMethod, Func CanExecute).

Ich möchte wissen, ist es möglich, einige, wie diese Warnung zu entfernen. Async und warten werden benötigt, sonst meine Methode: enterButtonClicked(); würde synchron aufgerufen werden.

... 
    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

Sie müssen uns die Unterschrift des DelegateCommand-Konstruktors zeigen. Höchstwahrscheinlich erstellen Sie eine "async void" -Funktion, da DelegateCommand keinen Konstruktor enthält, der einen 'Func ' akzeptiert. Tun Sie einfach 'new DelegateCommand (enterButtonClicked)' und es sollte deutlicher sein, was das Problem ist. –

+0

Es hat zwei Konstruktoren 1) öffentlichen DelegateCommand (Aktion executeMethod) und 2) öffentlichen DelegateCommand (Aktion executeMethod, Func canExecute). Ich möchte wissen, ist es möglich, einige, wie diese Warnung zu entfernen. async und warte sind sonst erforderlich meine Methode: enterButtonClicked(); wäre synchrone Verbindung. –

Antwort

1

async erwarten ist nur kompatibel mit Func<Task> oder Func<Task<T>> wenn Sie nicht, dass dann haben Sie, was ein „Async leer“ betrachtet wird, die Sie nicht tun sollten.

Ihre beiden Optionen sind nicht die Aufgabe

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

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

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

public async Task enterButtonClicked() 
{ 

} 
... 

erwarten, die alle Ausnahmen von enterButtonClicked angehoben bedeutet, dass

oder verwenden Sie einen besseren Delegierten Befehl unerwähnt bleiben, dass Asynchron-Funktionen unterstützt. Persönlich mag ich den AsyncCommand aus dem Nito.Mvvm.Async NuGet-Paket geschrieben von 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() 
{ 

} 
... 

Der AsyncCommand Delegierte setzt CanExecute auf false während die Aufgabe so eine Person ausgeführt wird, kann nicht wiederholt klicken, wenn die Aktion abgeschlossen ist.

+0

Vielen Dank für eine sehr schöne Erklärung. –

Verwandte Themen