0

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

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

        lbxServersThatAreUp.Items.Add(text);
    }

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

所以我尝试像这样更改以下行:

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

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

4

2 回答 2

2

MethodInvoker是一个没有参数的委托 - 你一个参数。两种选择:

  • 使用Action<string>

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

    MethodInvoker invoker = () => AddTextToUpListBox(text);
    lbxServersThatAreUp.Invoke(invoker);
    
于 2011-09-06T19:50:41.110 回答
0
private void AddTextToUpListBox(string text)
{
    if (lbxServersThatAreUp.InvokeRequired)
    {
        lbxServersThatAreUp.Invoke((Action<String>)AddTextToUpListBox, new object[] { text});
        return;
    }

    lbxServersThatAreUp.Items.Add(text);
}

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

于 2011-09-06T19:48:25.773 回答