gpt4 book ai didi

c# - NullReferenceException 而涉及的对象是有效的

转载 作者:太空狗 更新时间:2023-10-29 21:28:40 27 4
gpt4 key购买 nike

NullReferenceException 在所有涉及的对象都有效的行上被抛出。 StackTrace 显示第 # 行是 432。

代码是

enter image description here

这里,FlagstempFlags 都是数据表。两个数据表的列的数据类型都是原始的(十进制、日期时间、短)。该应用程序是一个多线程应用程序,代码片段属于线程函数。 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 行放入锁后,异常消失了,到目前为止。

最佳答案

每当您从框架内获得 NullReferenceException 并且您是多线程时,这几乎肯定是一个线程安全问题,您没有在应该的地方应用锁。

关于c# - NullReferenceException 而涉及的对象是有效的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14117078/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com