感谢先前在本网站上回答的问题,我已经构建了一小段代码。不幸的是,我一直在收到一个我不太了解的错误。这是代码块:
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[] { });
但如果我这样做,它只会说“方法名称预期”。我在这里做错了什么?
答案 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);
}
您需要传入方法的参数,您还应该能够直接将该方法作为委托传递。