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);
}
}));
如果我是你,我会拆分我的Invoke函数,以便在其他地方声明被调用的委托函数。像这样的内联函数声明对调试来说已经够糟糕的了,而委托更是如此。
我想你会发现,通过以这种方式声明你的行内函数,编译器将所有变量赋值为局部变量,这些局部变量在使用前不会被初始化。
当您在最后一个循环中使用RemoveAt删除项目时,您必须向下而不是向上,因为每次使用RemoveAt删除项目时,最后一个项目的索引都会减少。如果你向下循环,这不会影响结果:
for (int i = ListBox.Items.Count - 1; i >= ServerClient.pclist.Count; i--)
{
ListBox.Items.RemoveAt(i);
}