我正在使用C#中的.NET WinForms应用程序,运行3.5 .NET框架.在这个应用程序中,我正在设置a DataColumn中的.Expression成员DataTable,如下所示:
DataColumn column = dtData.Columns["TestColumn"];
column.Expression = "some expression";
Run Code Online (Sandbox Code Playgroud)
我实际设置的第二行Expression有时会导致以下异常:
FileName=
LineNumber=0
Source=System.Data
TargetSite=Int32 RBInsert(Int32, Int32, Int32, Int32, Boolean)
System.InvalidOperationException: DataTable internal index is corrupted: '5'.
at System.Data.RBTree`1.RBInsert(Int32 root_id, Int32 x_id, Int32 mainTreeNodeID, Int32 position, Boolean append)
at System.Data.RBTree`1.RBInsert(Int32 root_id, Int32 x_id, Int32 mainTreeNodeID, Int32 position, Boolean append)
at System.Data.Index.InitRecords(IFilter filter)
at System.Data.Index.Reset()
at System.Data.DataTable.ResetInternalIndexes(DataColumn column)
at System.Data.DataTable.EvaluateExpressions(DataColumn column)
at System.Data.DataColumn.set_Expression(String value)
Run Code Online (Sandbox Code Playgroud)
关于错误何时发生,没有明显的押韵或理由; 在加载相同的数据集时,它可能工作正常,但重新加载它将失败,反之亦然.这让我认为它与竞争条件有关,在DataTable我正在尝试修改其中一个列时,正在发生另一个写操作.但是,与DataTables 相关的代码不是多线程的,只能在UI线程上运行.
我搜索过网络和 …