MethodInvoker по сравнению с действием для управления. BeginInvoke

Перейдите в каталог, где у вас есть исполняемый файл MySQL. -u для имени пользователя и -p для запроса пароля:

C:\xampp\mysql\bin>mysql -u username -ppassword databasename < C:\file.sql
56
задан Otiel 3 August 2012 в 14:00
поделиться

5 ответов

Оба одинаково верны, но в документации для Control.Invoke указано, что:

Делегат может быть экземпляром EventHandler, в этом случае отправитель параметр будет содержать этот элемент управления, а параметр события будет содержать EventArgs.Empty. Делегат также может быть экземпляром MethodInvoker, или любой другой делегат, который аннулирует список параметров. Звонок в EventHandler или MethodInvoker делегат будет быстрее, чем звонок другому тип делегата.

Так что MethodInvoker будет более эффективным выбором.

76
ответ дан 26 November 2019 в 17:15
поделиться

Я предпочитаю использовать лямбды и действия / функции:

Control.BeginInvoke(new Action(() => MessageBox.Show("What a great post")));
10
ответ дан 26 November 2019 в 17:15
поделиться

Действие определяется в System, а MethodInvoker определяется в System.Windows.Forms - возможно, вам будет лучше использовать Action, поскольку он переносится в другие места. Вы также найдете больше мест, которые принимают Action в качестве параметра, чем MethodInvoker.

Однако в документации указано, что вызовы делегатов типа EventHandler или MethodInvoker в Control.Invoke () будут выполняться быстрее, чем любой другой тип.

Помимо названия, в котором они находятся, я не верю, что существует значимая функциональная разница между Action и MethodInvoker - они по существу оба определены как:

public delegate void NoParamMethod();

Кроме того, Action имеет несколько перегрузок, которые позволяют параметры, которые необходимо передать, и они являются общими, поэтому они могут быть типизированными.

5
ответ дан 26 November 2019 в 17:15
поделиться

Также согласно MSDN:

MethodInvoker предоставляет простой делегат, который используется для вызова метода с пустым списком параметров. Этот делегат можно использовать при вызове метода Invoke элемента управления или когда вам нужен простой делегат, но вы не хотите определять его самостоятельно.

Action , с другой стороны, может принимать до 4 параметров.

Но я не думаю, что есть какая-либо разница между MethodInvoker и Action ], поскольку они оба просто инкапсулируют делегат, который не принимает парметр и возвращает void

. Если вы посмотрите на их определения, вы просто увидите это.

public delegate void MethodInvoker();
public delegate void Action();

Кстати, вы также можете написать свою вторую строку как.

Control.BeginInvoke(new MethodInvoker(DoSomething), null);
3
ответ дан 26 November 2019 в 17:15
поделиться

Это вопрос предпочтения в большинстве случаев, если вы не собираетесь повторно использовать метод DoSomething (). Кроме того, анонимные функции помещают переменные с заданной областью в кучу, что может сделать эту функцию более дорогой.

2
ответ дан 26 November 2019 в 17:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: