c#调用变坏了

本文关键字:坏了 调用 | 更新日期: 2023-09-27 18:11:20

ListBox是一个列表框ServerClient是一个类的实例,它有arraylist

Arraylist pclist = new Arraylist();

temping是字符串数组

strings[] temping = new string[6];

现在,在执行过程中…我得到的错误是:"附加信息:对象引用未设置为对象的实例。"

this.ListBox.Invoke(new MethodInvoker(delegate
{
    for (int i = 0; i < ServerClient.pclist.Count; i++)
    {
        // I am Alive,MyPcName,192.168.1.1,Status,NickName,datetime
        temp = ServerClient.pclist[i].ToString();
        temping = temp.Split(',');
        ListBox.Items.Add(temping[4] + "( " + temping[3] + " )");
    }
    for (int i = ServerClient.pclist.Count; i < ListBox.Items.Count; i++)
    {
        ListBox.Items.RemoveAt(i);
    }
}));

c#调用变坏了

如果我是你,我会拆分我的Invoke函数,以便在其他地方声明被调用的委托函数。像这样的内联函数声明对调试来说已经够糟糕的了,而委托更是如此。

我想你会发现,通过以这种方式声明你的行内函数,编译器将所有变量赋值为局部变量,这些局部变量在使用前不会被初始化。

当您在最后一个循环中使用RemoveAt删除项目时,您必须向下而不是向上,因为每次使用RemoveAt删除项目时,最后一个项目的索引都会减少。如果你向下循环,这不会影响结果:

for (int i = ListBox.Items.Count - 1; i >= ServerClient.pclist.Count; i--)
{
    ListBox.Items.RemoveAt(i);
}