我收到此错误(翻译自德语): System.Windows.Forms.dll中出现类型“System.Reflection.TargetParameterCountException”的异常(第一次机会)。
我的代码:
private async void ClientLogedIn(object sender, string username, string ipAddress)
{
PVPNetConnect.RiotObjects.Platform.Clientfacade.Domain.LoginDataPacket LoginData = await pvp.GetLoginDataPacketForUser();
PVPNetConnect.RiotObjects.Platform.Summoner.AllSummonerData AllSummonerData = LoginData.AllSummonerData;
PVPNetConnect.RiotObjects.Platform.Summoner.Summoner Summoner = AllSummonerData.Summoner;
Invoke(new AddDelegate(Add), new string[] { "Dd", "ee", "ff" });
}
代表+无效:
private delegate void AddDelegate(String[] vars);
private void Add(string[] vars)
{
var li = new ListViewItem(vars);
listView1.Items.Add(li);
}
答案 0 :(得分:3)
您需要将数组包装到对象数组的第一个元素中:
Invoke(new AddDelegate(Add), new object[] { new string[] { "Dd", "ee", "ff" } });
请注意,使用lambda通常更容易编写,因为您无需担心委托声明或管理对象数组:
Invoke(new Action( () => Add(new[] { "Dd", "ee", "ff" }));
答案 1 :(得分:1)
因为Invoke
使用params
作为第二个参数,你可以提供N个不同的参数并将它们全部包装在一个数组中,或者你可以只提供一个数组传入的所有参数。在这里,你的字符串数组被解释为含义"传入三个参数,每个参数类型为字符串",这不是你想要的,你想要传递一个string[]
类型的参数。要做到这一点,只需确保参数的编译时类型不是数组,这可以通过简单的强制转换完成:
Invoke(new AddDelegate(Add), (object)new string[] { "Dd", "ee", "ff" });