Несоответствие количества параметров с 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],
                }
            );
        }
    }

Любые идеи?


person sooprise    schedule 15.09.2010    source источник
comment
Какая подпись у AddListViewItem?   -  person Daniel Renshaw    schedule 16.09.2010
comment
Это прямо здесь. Он вызывает это рекурсивно.   -  person BFree    schedule 16.09.2010
comment
Обязательно примите ответ, который решил вашу проблему.   -  person BFree    schedule 16.09.2010


Ответы (2)


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

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

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

(or)

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

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

person Ani    schedule 15.09.2010
comment
@Ani, не могли бы вы объяснить, что такое ковариация массива? лучше с примером. Спасибо. - person smwikipedia; 18.04.2013
comment
Спасибо! Это сводило меня с ума. Ваш первый пример хорошо сработал в моей ситуации. Я передавал массив объектов, но метод вызова недостаточно умен, чтобы обрабатывать его как есть. Пример... .Invoke(mysource, new object[] {myobjectarray}); - person John Suit; 02.07.2015

Обновить информацию:

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

person Willian    schedule 15.04.2014