2016-12-01 5 views
-1

Я пытаюсь передать метод в качестве параметра. Метод ничего не возвращает (void), поэтому я делаю это в виде Action. Ошибка возникает, когда я вызываю Execute из команд. Это ошибка:Функция как параметр (без результата результата возврата)

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

Любая помощь?

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 Привет и спасибо, но Func используется, когда вам нужно вернуть значение? Это не так? – avechuche

+0

Возможный дубликат [Тип аргумента «void» не присваивается типу параметра «System.Action»] (http://stackoverflow.com/questions/3387812/argument-type-void-is-not-assignable-to-parameter -type-system-action) –

+3

Вам нужно использовать 'TaskEx.Run (() => runAction())' или просто 'TaskEx.Run (runAction)'. На данный момент вы передаете 'Func '. – Lee

ответ

0

Почему вы не называете действия в методе Execute?

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

Вы должны запустить его так:

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

В другом случае вы возвращаете свои действия, вместо того, чтобы запустить его.

 Смежные вопросы

  • Нет связанных вопросов^_^