将匿名方法传递给ProgressBar.Invoke()

时间:2012-12-06 20:20:34

标签: c# .net winforms multithreading invoke

我正在尝试使用匿名方法将委托传递到progressBar.Invoke(Delegate)

progressBar.Invoke(() => progressBar.Value = count);

但是我收到以下错误:

  

无法将lambda表达式转换为'System.Delegate'类型,因为它不是委托类型。

有人可以解释一下我做错了吗?

2 个答案:

答案 0 :(得分:8)

该方法采用Delegate,而不是Action。因此,当你这样做时:

() => { .. }

它不知道你想要什么代表。这样做:

progressBar.Invoke(new Action(() => progressBar.Value = count));

答案 1 :(得分:3)

Invoke不接受特定类型的委托,它需要Delegate(意味着它可以接受任何具有任何签名的委托)。您需要传递特定类型的委托(您选择哪一个并不重要):

progressBar.Invoke(new Action(() => progressBar.Value = count));