【问题标题】:this.Invoke throws cannot convert from 'method group' to 'System.Delegate'this.Invoke throws 无法从“方法组”转换为“System.Delegate”
【发布时间】:2017-08-12 23:28:57
【问题描述】:

我不知道如何解释,所以这是我的代码:

this.Invoke(listBox1.Items.Add, new Object[] { e.Data.ToString() });

但是,如果我没有任何错误,一切都会好起来的,但遗憾的是我有 2 个错误:

错误 1 ​​

'System.Windows.Forms.Control.Invoke(System.Delegate, params object[])' 的最佳重载方法匹配有一些无效参数

错误 2

参数 1:无法从“方法组”转换为“System.Delegate”

我应该怎么做才能克服这些异常?

【问题讨论】:

  • 你应该有一个单独的调用方法。

标签: c# winforms invoke


【解决方案1】:

Invoke 要求您使用 delegate 作为第一个参数。 ListBox.Items.Add 是一个方法,而不是一个委托。

但是,您可以使用这个:

this.Invoke((Action)delegate()
{
    listBox1.Items.Add(e.Data.ToString());
});

【讨论】:

  • 这里实际上不需要匿名方法(添加它也不会破坏任何东西);只是需要转换给适当的代表。
【解决方案2】:

设置一个委托来工作。

Invoke(new Action(() => 
{ 
  // Do it 
}));

【讨论】:

    【解决方案3】:

    你检查是否需要调用控件,如果需要调用它:

    if(listBox1.InvokeRequired)
         listBox1.Invoke((Action)(()=> listBox1.Items.Add(e.Data.ToString())); //if e.Data is the object to add it to listBox!
    

    【讨论】:

    • 大概他已经知道他需要调用,并且不需要以编程方式检查。这也根本无法解决他的编译时错误。
    猜你喜欢
    • 1970-01-01
    • 2011-06-23
    • 2013-02-18
    • 1970-01-01
    • 2021-06-25
    • 2013-10-02
    • 1970-01-01
    • 2021-01-26
    • 2017-09-18
    相关资源
    最近更新 更多