2016-12-01 7 views
-1

Ich versuche eine Methode als Parameter zu übergeben. Die Methode gibt nichts zurück (void), also mache ich es in Form von Action. Der Fehler tritt auf, wenn ich Execute von den Befehlen aufrufe. Dies ist der Fehler:Funktion als Parameter (Ohne Rückgabetyp)

Can not be converted from ' void ' to ' System.Action '.

Irgendwelche Hilfe?

private async void Execute(Action runAction) 
{ 
    ... 

    await TaskEx.Run(() => runAction); 

    ... 

} 

_command1 = new RelayCommand(Execute(Class.ExecuteVoidMethod1()),() => CanExecuteVoidMethod1()); 

EDIT

_command1 = new RelayCommand(Execute(() => Class.ExecuteVoidMethod1()),() => CanExecuteVoidMethod1()); // Same Error 

_command1 = new RelayCommand(Execute(() => Class.ExecuteVoidMethod1),() => CanExecuteVoidMethod1()); // Only assignment, call, increment, decrement, await expresion and new object expressions can be used as a statement 
+0

@ThePerplexedOne Hallo und danke, aber Func wird verwendet, wenn Sie einen Rückgabewert benötigen? Es ist nicht so? – avechuche

+0

Mögliches Duplikat von [Argumenttyp 'void' kann nicht dem Parametertyp 'System.Action' zugewiesen werden] (http://stackoverflow.com/questions/3387812/argument-type-void-is-not-assignable-to-parameter -type-system-action) –

+3

Sie müssen 'TaskEx.Run (() => runAction())' oder nur 'TaskEx.Run (runAction)' verwenden. Im Moment passierst du einen 'Func '. – Lee

Antwort

0

Warum Sie nicht über Ihre Aktion in der Execute Methode aufrufen?

await TaskEx.Run(() => runAction); 

Sie müssen es wie folgt aus:

await TaskEx.Run(() => runAction()); 

In anderen Fall, dass Sie Ihre Aktion zurückkehren, anstatt es zu laufen.