У меня есть этот оператор кода, и я запускаю его в таймер, его интервал составляет 50 мс. После того, как thread1
работал, мой связанный список (данные) равен Read_Data3. Затем я проверяю это условие if (data.ElementAt(0) == Convert.ToByte('$'))
. Однако при этом появляется сообщение об ошибке «Значение не может быть нулевым». Я проверил, что массивы и связанные списки не пустые. В чем причина этой ошибки? Есть идеи?C# LinkedList Значение не может быть равно
thread1 = new Thread(delegate()
{
Read_Data2 = Read_Data1;
lastCount = count;
division = lastCount/18;
remaning = (lastCount - 18 * division);
Read_Data3 = new byte[lastCount - remaning];
for (int i = 0; i < lastCount - remaning; i++)
{
Read_Data3[i] = Read_Data2[i];
}
if (remaning > 0)
{
Read_Data4 = new byte[remaning];
for (int i = 0; i < remaning; i++)
{
Read_Data4[i] = Read_Data2[lastCount - remaning + i];
}
}
count = remaning;
if (lastCount - remaning > 17)
data = new LinkedList<byte>(Read_Data3);
});
thread1.Start();
if (data.ElementAt(0) == Convert.ToByte('$'))
{
for (int i = 0; i < (lastCount - remaning)/18; i++)
{
//time = new XDate(DateTime.Now);
if (data.ElementAt(0) == Convert.ToByte('$'))
{
data.Remove(data.ElementAt(0));
for (int x = 0; x < 16; x++)
{
listAuido.Add(time, data.ElementAt(0));
data.Remove(data.ElementAt(0));
}
listPulse.Add(time, data.ElementAt(0));
data.Remove(data.ElementAt(0));
}
zgcMasterPane.AxisChange();
}
if (remaning > 0)
{
data2 = new LinkedList<byte>(Read_Data4);
data2.Remove(data2.ElementAt(0));
time = new XDate(DateTime.Now);
for (int i = 0; i < remaning - 2; i++)
{
listAuido.Add(time, data2.ElementAt(0));
data2.Remove(data2.ElementAt(0));
}
}
}