NullReferenceException
被抛出在所有涉及的对象都有效的线上。StackTrace
显示第 # 行是 432。
代码是
在这里,Flags
两者tempFlags
都是数据表。两个数据表的列的数据类型都是原始的(十进制、日期时间、短)。该应用程序是一个多线程应用程序,代码片段属于线程函数。Flags
在实例级别贴花,即tempFlags
在线程函数内部声明时共享给所有线程。
在这个特定的时间实例中,Flags
包含 1946 条记录并tempFlags
包含 1。那么,为什么会出现 NullReferenceException 呢?
编辑#1
ex.InnerException
null
ex.StackTrace
at System.Data.DataTable.RecordStateChanged(Int32 record1, DataViewRowState oldState1, DataViewRowState newState1, Int32 record2, DataViewRowState oldState2, DataViewRowState newState2)
at System.Data.DataTable.InsertRow(DataRow row, Int64 proposedID)
at System.Data.DataTable.MergeRow(DataRow row, DataRow targetRow, Boolean preserveChanges, Index idxSearch)
at System.Data.Merger.MergeTable(DataTable src, DataTable dst)
at System.Data.Merger.MergeTableData(DataTable src)
at System.Data.Merger.MergeTable(DataTable src)
at System.Data.DataTable.Merge(DataTable table, Boolean preserveChanges, MissingSchemaAction missingSchemaAction)
at System.Data.DataTable.Merge(DataTable table)
at [...].cs:line 432"
ex.Data
{System.Collections.ListDictionaryInternal}
[System.Collections.ListDictionaryInternal]: {System.Collections.ListDictionaryInternal}
IsFixedSize: false
IsReadOnly: false
Keys: {System.Collections.ListDictionaryInternal.NodeKeyValueCollection}
Values: {System.Collections.ListDictionaryInternal.NodeKeyValueCollection}
ex.Message
"Object reference not set to an instance of an object."
ex.Source
"System.Data"
编辑#2
看起来 Merge 语句不是线程安全的,因为在将第 432 行放入锁后,异常消失了,SO FAR。