C# 无法调用方法
我尝试从其他线程更改ListView。我收到一个错误:“System.String类型的对象无法转换为System.String[]类型。”。如果我不将字符串[]作为参数传递,编译器将不会编译代码。你知道可能出了什么问题吗C# 无法调用方法,c#,listview,invoke,C#,Listview,Invoke,我尝试从其他线程更改ListView。我收到一个错误:“System.String类型的对象无法转换为System.String[]类型。”。如果我不将字符串[]作为参数传递,编译器将不会编译代码。你知道可能出了什么问题吗 public delegate void UpdateListView(string[] request); public void UpdateComponents(string[] request) { for (int j = 0; j < request
public delegate void UpdateListView(string[] request);
public void UpdateComponents(string[] request)
{
for (int j = 0; j < request.Length; j++)
{
switch (request[j])
{
case "ListViewSubnetworksChanged":
if (listView1.InvokeRequired)
{
UpdateListView d = new UpdateListView(UpdateComponents);
this.Invoke(d, request);
}
else
{
listView1.Items.Clear();
}
break;
}
}
}
public委托void UpdateListView(字符串[]请求);
public void UpdateComponents(字符串[]请求)
{
for(int j=0;j
该方法要求一个数组,因此不能向其传递字符串。如果只有一个字符串,则可以创建一个包含该字符串的新数组,并按如下方式调用该方法:
string val = "Data";
string[] arrayVal = new string[] { val };
UpdateComponents(arrayVal);
或者将其简化为一行:
UpdateComponents(new string[] { val });
没什么问题。
编译器get的you语法错误导致您试图将string作为参数,而Invoke()需要的参数是string[]
您应该以所示的正确格式提供数据。
您可以使用STRING.ToArray()聚合函数将字符串转换为字符串[]
顺便说一句,如果您想对集合的数据进行迭代,请使用foreach循环。回顾您的问题和代码,我不明白为什么您首先要进行递归调用。我会将您的代码简化如下:
private void UpdateComponents(string[] request)
{
for (int j = 0; j < request.Length; j++)
{
switch (request[j])
{
case "ListViewSubnetworksChanged":
ClearListViewItemsSafe();
break;
}
}
}
private void ClearListViewItemsSafe()
{
if (listView1.InvokeRequired)
{
this.Invoke(new Action(() => listView1.Items.Clear()));
}
else
{
listView1.Items.Clear();
}
}
private void UpdateComponents(string[] request)
{
foreach (string r in request)
{
if (r == "ListViewSubnetworksChanged")
{
ClearListViewItemsSafe();
return;
}
}
}