【发布时间】:2010-06-12 14:35:57
【问题描述】:
在这个post 中,有一种非常有趣的方式可以使用静态扩展方法更新 UI 线程。
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 无法将 lambda 表达式转换为类型“System.Delegate”,因为它不是委托类型
【问题讨论】:
-
事实上......看起来更近了一点,我似乎也得到了第一个代码示例的错误......虽然我现在实际上正在为 .NET 4.0 编译。
标签: c#-3.0