У меня есть приложение, в котором система DAQ сэмплирует данные с частотой около 1 кГц, которая затем записывается в DataTable.IndexOutOfRangeException on Datatable
В приведенном ниже блоке кода содержится часть кода, которая добавляет данные в данные.
Public Sub AddTimeLoadData(DateTime As DateTime, DataPointNo As Integer, ClampForceN As Double, _
TransverseForceN As Double, TransverseDispMm As Double, NumLoadCycles As Integer)
Try
_tblTimeLoadData.AddtblTimeLoadDataRow(NumLoadCycles, TransverseDispMm, TransverseForceN, ClampForceN, DataPointNo, DateTime, _TimeLoadTestRow)
_timRaiseDataAdded.Start()
Catch ex As Exception
Throw New Exception("Time/load data could not be added: " & ex.Message, ex)
End Try
End Sub
Обновление графического интерфейса пользователя каждый раз, когда AddTimeLoadData называется будет излишним, так что вместо этого я начинаю System.Timers.Timer. В событии Elapsed таймера я поднимаю событие TimeLoadDataUpdated.
В GUI другой класс слушает это событие и обновляет диаграмму. Это работает хорошо в большинстве случаев, но иногда я получаю исключение IndexOutOfRangeException при чтении из таблицы данных.
Это довольно ясно, что это что-то делать с синхронизацией, но я до сих пор не понял, что именно может быть проблемой. Глядя на код, индекс «i» не сможет выйти из диапазона. Одна мысль, что пришла в том, что если цикл достигает последней строки в то же время, как она создается, я мог бы проблему, так что я мог бы просто попробовать обновив цикл для
For i As Integer = s.Points.Count To sender.tblTimeLoadData.Count - 2
Или, может быть, есть что-то еще, что я предвидел !?
Хорошо, поскольку вы указали ошибку и находитесь в режиме отладки; каковы значения 's.Points.Count' и' sender.tblTimeLoadData.Count' и сравниваются с количеством строк? –
Дубликат [Что такое IndexOutOfRangeException и как его исправить?] (Http://stackoverflow.com/questions/20940979/what-is-indexoutofrangeexception-and-how-do-i-fix-it) –
Странно, когда я проверяю отладчик, «я» никогда не бывает больше, чем sender.tblTimeLoadData.Count - 1. – LinusN