TargetParameterCountException:invoke上的参数计数不匹配 - 委托

时间:2014-12-12 08:13:34

标签: c# .net multithreading

我有以下代码(删除无关)

//top of class declaration
private delegate void UpdateFormElements(string status, bool addEmptyRow);

//inside a function in my class
if(lboImages.InvokeRequired)
{
   lboImages.Invoke((UpdateFormElements)delegate { UpdateListBox("some text", true); });
}

private void UpdateListBox(string line, bool addEmptyRow)
{
    lboImages.Items.Add(line);
    if (addEmptyRow)
    {
        lboImages.Items.Add("");
    }
}

基本上我正在尝试将两个参数传递给UpdateListBox函数来测试是否在我的列表框中添加空行,但是我在标题中收到错误。我已经尝试将两个值放在一个对象[]中,但它似乎没有改变任何东西,因为我仍然得到错误。

我还是新手使用线程所以不确定我在哪里出错了。

1 个答案:

答案 0 :(得分:2)

目前尚不清楚为什么要在这里使用匿名方法。问题是你正在创建一个带有两个参数的委托类型,但是你没有将参数(这些参数的值)传递给Invoke

我怀疑你只是想要:

lboImages.Invoke((UpdateFormElements) UpdateListBox, "some text", true));

使用方法组转换来创建UpdateFormElements委托,并为其提供所需的两个参数。

或者,您可以使用lambda表达式:

MethodInvoker invoker = () => UpdateListBox(line, addEmptyRow);
lboImages.Invoke(invoker);