Как обновлять ProgressBar в побочном потоке c#?
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);, увы но при приведении типов вообще не всегда можно ограничиться круглым скобками лишь для типа и опустить их для приводимого значения, конечно можно об этом забыть и не скомпилируется, но с опытом уже знаешь, если приведение не компилируется, то нужно попробовать добавить скобки для значения.
Используйте https://msdn.microsoft.com/ru-ru/library/system.wi...
Ибо из другого потока UI обновлять нельзя и MS для этого сделала готовый инструмент. Да и велосипеды не требуются в этом случае.