A customer has sent me this stack trace from an error they received when loading a screen. They have not been able to consistently reproduce the problem. Does anyone have any clue what might be causing a null reference error to be thrown from the internal BinarySearchValues method in the combo control when I call DataSet.AcceptChanges?
Thanks,
Glenn
-------------STACK TRACE----------- at Infragistics.Win.UltraWinGrid.UltraDropDownBase.BinarySearchSortComparer.BinarySearchValues(List`1 rows, Object value) at Infragistics.Win.UltraWinGrid.UltraDropDownBase.PerformBinarySearch(Object dataValue, Int32& index, Boolean getValue) at Infragistics.Win.UltraWinGrid.UltraDropDownBase.GetTextHelper(Object dataValue, Int32& index) at Infragistics.Win.UltraWinGrid.UltraDropDownBase.Infragistics.Win.IValueList.GetText(Object dataValue, Int32& index) at Infragistics.Win.UltraWinGrid.UltraCombo.SelectedItemChangeHelper(ComboSelectedItemChangeContext context, Object newData) at Infragistics.Win.UltraWinGrid.UltraCombo.FireListChanged() at Infragistics.Win.UltraWinGrid.RowsCollection.SyncRows() at Infragistics.Win.UltraWinGrid.RowsCollection.EnsureNotDirty() at Infragistics.Win.UltraWinGrid.RowsCollection.get_Count() at Infragistics.Win.UltraWinGrid.UltraDropDownBase.BuildSortedValueMemberList() at Infragistics.Win.UltraWinGrid.UltraDropDownBase.get_CanDoBinarySearch() at Infragistics.Win.UltraWinGrid.UltraDropDownBase.GetTextHelper(Object dataValue, Int32& index) at Infragistics.Win.UltraWinGrid.UltraDropDownBase.Infragistics.Win.IValueList.GetText(Object dataValue, Int32& index) at Infragistics.Win.UltraWinGrid.UltraCombo.SelectedItemChangeHelper(ComboSelectedItemChangeContext context, Object newData) at Infragistics.Win.UltraWinGrid.UltraCombo.FireListChanged() at Infragistics.Win.UltraWinGrid.RowsCollection.OnListChangedHelper(ListChangedEventArgs e, Boolean calledFromBandListChanged) at Infragistics.Win.UltraWinGrid.RowsCollection.OnListChanged(Object sender, ListChangedEventArgs e) at System.ComponentModel.ListChangedEventHandler.Invoke(Object sender, ListChangedEventArgs e) at System.Windows.Forms.BindingSource.OnListChanged(ListChangedEventArgs e) at System.Windows.Forms.BindingSource.InnerList_ListChanged(Object sender, ListChangedEventArgs e) at System.Data.DataView.OnListChanged(ListChangedEventArgs e) at System.Data.DataView.IndexListChanged(Object sender, ListChangedEventArgs e) at System.Data.DataView.IndexListChangedInternal(ListChangedEventArgs e) at System.Data.DataViewListener.IndexListChanged(ListChangedEventArgs e) at System.Data.Index.<OnListChanged>b__2(DataViewListener listener, ListChangedEventArgs args, Boolean arg2, Boolean arg3) at System.Data.Listeners`1.Notify[T1,T2,T3](T1 arg1, T2 arg2, T3 arg3, Action`4 action) at System.Data.Index.OnListChanged(ListChangedEventArgs e) at System.Data.Index.FireResetEvent() at System.Data.DataTable.RestoreIndexEvents(Boolean forceReset) at System.Data.DataTable.AcceptChanges() at System.Data.DataSet.AcceptChanges() at NewDawnTechControls.NdtSnapInSessionController.GetSessionDataInternal(Object sessionParams) at System.Threading._ThreadPoolWaitCallback.WaitCallback_Context(Object state) at System.Threading.ExecutionContext.runTryCode(Object userData) at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading._ThreadPoolWaitCallback.PerformWaitCallbackInternal(_ThreadPoolWaitCallback tpWaitCallBack) at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback(Object state)
You are correct. This does happen in a multithreaded piece of code. During this section, databindings are disabled, so I thought it would have been safe. We've now wrapped this piece with an InvokeRequired check.
Thanks for the help,
Glenn Thimmes
I could be wrong, but this looks like it might be a threading issue to me. Is your application using multiple threads?