C# 无法调用方法

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

我尝试从其他线程更改ListView。我收到一个错误:“System.String类型的对象无法转换为System.String[]类型。”。如果我不将字符串[]作为参数传递,编译器将不会编译代码。你知道可能出了什么问题吗

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;
        }
    }
}