私は、DAQシステムが約1kHzでデータをサンプリングし、DataTableに書き込むアプリケーションがあります。DatatableのIndexOutOfRangeException
以下のコードブロックは、データテーブルにデータを追加するコードの一部を示しています。
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イベントを発生させます。
別のクラスがこのイベントをリッスンし、グラフを更新します。これはほとんどの場合よく機能しますが、時にはデータテーブルから読み込むときに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