Несовпадение количества параметров с Invoke? - PullRequest
14 голосов
/ 16 сентября 2010

Приведенный ниже кодовый блок приводит к ошибке: TargetParameterCountException не обрабатывается кодом пользователя. Несоответствие количества параметров.

    public void AddListViewItem(string[] Data)
    {
        if (InvokeRequired)
        {
            Invoke(new Action<string[]>(AddListViewItem), Data);
        }
        else
        {
            ListViewData.Items.Add(Data[0]).SubItems.AddRange
            (
                new string[]
                { 
                    Data[1],
                    Data[2],
                    Data[3],
                }
            );
        }
    }

Есть идеи?

Ответы [ 2 ]

26 голосов
/ 16 сентября 2010

Ошибка возникает из-за ковариации массива;массив строк присваивается object[].Это заставляет метод Invoke обрабатывать каждый элемент массива string так, как если бы он был аргументом для метода AddListViewItem.

Вот исправление:

Invoke(new Action<string[]>(AddListViewItem), new object[] {Data});

(или)

Invoke(new Action<string[]>(AddListViewItem), (object)Data);

Это делает кристально ясным Invoke, что целевой метод принимает single параметр.

0 голосов
/ 15 апреля 2014

ОБНОВЛЕНИЕ информации:

Если вы используете Windows Server 2008 R2 , обратите внимание на Центр обновления Windows для .Net Framework 4.5.1 для Windows Server 2008 R2 x 64-разрядных систем KB2858725 . Для меня после установки это обновление исправило эту проблему.

...