Вызов C # идет плохо - PullRequest
       4

Вызов C # идет плохо

0 голосов
/ 13 октября 2011

ListBox - это список ServerClient - это экземпляр класса, у которого есть массив

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

Ответы [ 2 ]

1 голос
/ 13 октября 2011

На вашем месте я бы разделил свою функцию Invoke, чтобы вызываемая функция делегата была объявлена ​​в другом месте.Подобное объявление встроенной функции может быть достаточно плохим для отладки, но делегат вдвойне.

Я думаю, вы обнаружите, что, объявив вашу встроенную функцию таким образом, компилятор назначает все переменныекак местные жители, которые не были инициализированы перед использованием.

0 голосов
/ 13 октября 2011

Когда вы удаляете элементы с RemoveAt в последнем цикле, вам нужно идти вниз, а не вверх, потому что индекс последнего элемента уменьшается каждый раз, когда вы удаляете элемент с RemoveAt.Если вы зацикливаетесь, это не повлияет на результат:

for (int i = ListBox.Items.Count - 1; i >= ServerClient.pclist.Count; i--)
{
    ListBox.Items.RemoveAt(i);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...