this.Invoke((MethodInvoker) delegate() {
ProgressBar.PerformStep();
});
Понять очень просто, делегат это функция поэтому с круглыми и фигурными скобками, от обычной функции разница в том, что она используется как переменная (параметр метода), она передается в метод
this.Invoke
(это запомнить) чтобы он ее вызвал в потоке UI, а MethodInvoker просто приведение типа.
Еще один вариант:
this.Invoke((MethodInvoker) (() =>
{
ProgressBar.PerformStep();
}));
По сути, это вот такой код:
this.Invoke((MethodInvoker) () =>
{
ProgressBar.PerformStep();
});
Где значением переменной (таким же, как
0.5
,
"abc"
или
new Button()
) является следующее:
() =>
{
ProgressBar.PerformStep();
}
Остальное - обычное приведение к
MethodInvoker
, зачем тогда эти скобки вокруг значения, мы же не пишем
int x = (int)(0.5);
, увы но при приведении типов вообще не всегда можно ограничиться круглым скобками лишь для типа и опустить их для приводимого значения, конечно можно об этом забыть и не скомпилируется, но с опытом уже знаешь, если приведение не компилируется, то нужно попробовать добавить скобки для значения.