没有重载匹配委托

时间:2011-09-06 19:46:39

标签: c# delegates method-invocation

感谢先前在本网站上回答的问题,我已经构建了一小段代码。不幸的是,我一直在收到一个我不太了解的错误。这是代码块:

        private void AddTextToUpListBox(string text)
    {
        if (lbxServersThatAreUp.InvokeRequired)
        {
            lbxServersThatAreUp.Invoke(new MethodInvoker(AddTextToUpListBox), new object[] { });
            return;
        }

        lbxServersThatAreUp.Items.Add(text);
    }

我得到的错误是“没有Overload for'AddTextToUpListBox'匹配委托'System.Windows.Forms.MethodInvoker'”

所以我尝试更改以下行:

lbxServersThatAreUp.Invoke(new MethodInvoker(AddTextToUpListBox(text)), new object[] { });

但如果我这样做,它只会说“方法名称预期”。我在这里做错了什么?

2 个答案:

答案 0 :(得分:2)

MethodInvoker是一个没有参数的委托 - 你得到一个参数。两个选项:

  • 使用Action<string>

    lbxServersThatAreUp.Invoke((Action<string>)AddTextToUpListBox,
                               new object[] { text });
    
  • 使用lambda表达式创建MethodInvoker

    MethodInvoker invoker = () => AddTextToUpListBox(text);
    lbxServersThatAreUp.Invoke(invoker);
    

答案 1 :(得分:0)

private void AddTextToUpListBox(string text)
{
    if (lbxServersThatAreUp.InvokeRequired)
    {
        lbxServersThatAreUp.Invoke((Action<String>)AddTextToUpListBox, new object[] { text});
        return;
    }

    lbxServersThatAreUp.Items.Add(text);
}

您需要传入方法的参数,您还应该能够直接将该方法作为委托传递。