Ошибка индекса c#

194
25 августа 2018, 22:00
t2.Tick += (o, v) =>
{
    for (int i = 0; i < list.Count; i++)
    {
        if (i >= 397) continue;// для проверки
        new Thread(() => { list[i].ping(t2.Interval); }).Start();
        dvg[4, list[i].numPrint].Value = list[i].ipStatus;
    }
};

list.Count = 397. Когда i = 397, то заходит в цикл, создает поток. Почему игнорируется условие? подскажите знающие. Заранее спасибо.

Answer 1

Все верно. В вашем коде

for (int i = 0; i < list.Count; i++)
{
    if (i >= 397) continue;// для проверки
    new Thread(() => { list[i].ping(t2.Interval); }).Start();
    dvg[4, list[i].numPrint].Value = list[i].ipStatus;
}

Поток стартует не мгновенно, поэтому к моменту старта потока переменная i уже была увеличена. Если вам надо захватывать значение переменной i, то вы можете сначала скопировать его в другую локальную переменную, например

for (int i = 0; i < list.Count; i++)
{
    if (i >= 397) continue;// для проверки
    var j=i; // копия
    new Thread(() => { list[j].ping(t2.Interval); }).Start(); // захват копии переменной
    dvg[4, list[i].numPrint].Value = list[i].ipStatus;
}
READ ALSO
Создание обьектов Типа согласно ячейкам Шахматной доски

Создание обьектов Типа согласно ячейкам Шахматной доски

Подскажите как реализовать вот такую идею List'ом (наверное, только не List в List'е), ибо двумерные, рваные массивы не подходят по условиям задачи,...

256
Изменение сущностей в событии OnFlushDirty в NHibernate

Изменение сущностей в событии OnFlushDirty в NHibernate

Есть сущность "настройки", в которой хранится путь к даннымЕсть сущности, которые пользуются настройками, чтобы строить свой путь к данным

183
C# цепочка функций

C# цепочка функций

Есть 2 метода расширения :

184
Вырезать текст из предложения

Вырезать текст из предложения

Есть большое предложение, из которого нужно вырезать такую часть:

162