Сопоставление счетчика параметров с Invoke?

В приведенном ниже блоке кода возникает ошибка: 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],
                }
            );
        }
    }

Любые идеи?

Ответы

Ответ 1

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

Здесь исправление:

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

(или)

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

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

Ответ 2

Информация об обновлении:

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