В этой публикации есть очень интересный способ обновления потоков пользовательского интерфейса с использованием метода статического расширения.
public static void InvokeIfRequired(this Control c, Action<Control> action)
{
if(c.InvokeRequired)
{
c.Invoke(() => action(c));
}
else
{
action(c);
}
}
Что я хочу сделать, так это сделать универсальную версию, чтобы меня не ограничивал элемент управления. Это позволило бы мне сделать следующее, например (потому что я больше не ограничен только контролем)
this.progressBar1.InvokeIfRequired(pb => pb.Value = e.Progress);
Я пробовал следующее:
public static void InvokeIfRequired<T>(this T c, Action<T> action) where T : Control
{
if (c.InvokeRequired)
{
c.Invoke(() => action(c));
}
else
{
action(c);
}
}
Но я получаю следующую ошибку, которую не знаю, как исправить. Кто-нибудь какие-либо предложения?
Ошибка 5 Не удалось преобразовать лямбда-выражение в тип «System.Delegate», поскольку оно не является типом делегата