NullReferenceException
viene lanciato su una riga in cui tutti gli oggetti coinvolti sono validi. StackTrace
mostra la linea # è 432.NullReferenceException mentre gli oggetti coinvolti sono validi
Il codice è
Qui, Flags
e tempFlags
entrambi sono DataTable. I tipi di dati di colonne di entrambi i datatables sono primitivi (decimal, datetime, short). L'applicazione è un'applicazione multithread e lo snippet di codice appartiene alla funzione thread. Flags
viene decodificato a livello di istanza, cioè condiviso con tutti i thread mentre tempFlags
viene dichiarato all'interno della funzione thread.
Qui in questo particolare istante di tempo lo Flags
contiene record 1946 e tempFlags
contiene 1. Quindi, perché questa NullReferenceException ??
Modifica # 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"
Modifica # 2
Sembra la dichiarazione di unione non è thread-safe come dopo aver messo la linea 432 all'interno di un blocco, l'eccezione è andato, FINORA .
Usi serratura per tempFlags? mentre stai cancellando tempFlags. – Adil
Puoi pubblicare i dettagli delle eccezioni? Eccezione interna, traccia dello stack, ecc. – ryadavilli
@Adil Non dovrebbe importare, giusto? L'eccezione viene lanciata prima di quella riga e 'tempFlags' è una variabile locale nel metodo. –