【发布时间】:2026-01-16 04:05:02
【问题描述】:
我有一个应用程序,其中 DAQ 系统以大约 1 kHz 的频率对数据进行采样,然后将其写入 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 时都不需要更新 GUI,因此我启动了 System.Timers.Timer。在计时器的 Elapsed 事件中,我引发 TimeLoadDataUpdated 事件。
在 GUI 中,另一个类正在侦听此事件,并更新图表。这在大多数情况下都很好用,但有时我在从数据表中读取时会收到 IndexOutOfRangeException。
很明显,这与同步有关,但我还没有弄清楚到底是什么问题。 查看代码,索引“i”实际上不会超出范围。 出现的一个想法是,如果 for 循环在创建它的同时到达最后一行,我可能会遇到问题,所以我可以尝试将 for 循环更新为
For i As Integer = s.Points.Count To sender.tblTimeLoadData.Count - 2
或者我已经预见到了别的什么!?
【问题讨论】:
-
好吧 - 看到您已查明错误并处于调试模式;
s.Points.Count和sender.tblTimeLoadData.Count的值是多少,并与行数进行比较? -
很奇怪,当我检查调试器时,'I' 永远不会大于 sender.tblTimeLoadData.Count - 1。
标签: vb.net datatable indexoutofrangeexception