c# - 参数计数与 Invoke 不匹配?

标签 c# winforms parameters delegates 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],
                }
            );
        }
    }

有什么想法吗?

最佳答案

错误是由于数组协方差引起的;字符串数组可分配给 object[]。这会导致 Invoke 方法将 string 数组的每个元素视为 AddListViewItem 方法的参数。

这是一个修复:

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

(或)

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

这使得 Invoke 清楚地知道目标方法采用单个参数。

关于c# - 参数计数与 Invoke 不匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3721782/

相关文章:

c# - 尝试加载程序集 ID 65675 时 Microsoft .NET Framework 中发生错误

c# - 如何在 C# 中将 TreeView 项显示为 ListView 项

swift - 未命名参数必须使用空名称 '_' 是什么意思?

c# - 同时访问 C# List<T> 的多个索引是否安全?

c# - 如何检测 Lucene 索引中是否已经存储了类似的文档

c# - 如何从 web.config 中读取嵌套的配置元素?

C# 如何识别两个对象之间的碰撞

C# 和 F# - 什么情况下需要一个或另一个

java - Java中带有通用参数的for循环

C++在函数中使用指向结构的指针