使用BackgroundWorker时出现异常

本文关键字:异常 BackgroundWorker 使用 | 更新日期: 2024-09-27 09:19:47

我正试图将一些数据填充到BackgroundWorker中的自定义网格中。如果数据很小,那么它工作得很好,但如果数据很大,我会随机得到异常。有时我会得到"用户代码未处理NullReferenceException",有时我会收到"用户代码没有处理ArgumentOutOfRangeException"。下面我提到了我面临的一些例外情况。

基本上,我在Populate()方法中所做的是,通过使用foreach循环,我为自定义网格中的每个单元格分配值。当我不使用BackgroundWorker时,这很好。但是在使用BackgroundWorker时,我在将其分配给单元格时得到了null值。因此出现了许多例外情况。我不知道为什么会发生这种事。有什么建议可以克服这个问题吗?

下面是我使用的代码

代码:

BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += (sender, args) =>
{
if (this.PivotEngine.DataSource != null && this.PivotCalculations.Count > 0)
{
    // Populates the data for the grid. 
    // Without using the BackgroundWorker, the values are been populated properly.
    this.PivotEngine.Populate();        
}
};
worker.RunWorkerCompleted += (s, e) =>
{
MessageBox.Show("Process is complete");
};
if (!worker.IsBusy)
{
  worker.RunWorkerAsync();
}

例外1:

Exception:
System.NullReferenceException was unhandled by user code
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=Syncfusion.PivotAnalysis.Base
StackTrace:
   at Syncfusion.PivotAnalysis.Base.PivotEngine.PopulatePivotTable() in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Base'Src'Engine'PivotEngine.cs:line 5882
   at Syncfusion.PivotAnalysis.Base.PivotEngine.ResumeComputations(Boolean resetPivotCollections, Boolean shouldRefresh) in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Base'Src'Engine'PivotEngine.cs:line 2735
   at Syncfusion.PivotAnalysis.Base.PivotEngine.ResumeComputations(Boolean resetPivotCollections) in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Base'Src'Engine'PivotEngine.cs:line 2718
   at Syncfusion.PivotAnalysis.Base.PivotEngine.Populate() in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Base'Src'Engine'PivotEngine.cs:line 2829
   at Syncfusion.Windows.Forms.PivotAnalysis.PivotGridControlBase.Populate(PivotEngine pe, Boolean checkLazyLoading) in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Windows'Src'PivotGridControl'Core'PivotGridControlBase.cs:line 2990
   at Syncfusion.Windows.Forms.PivotAnalysis.PivotGridControlBase.<>c__DisplayClass1d.<ApplyRowCols>b__1a(Object sender, DoWorkEventArgs args) in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Windows'Src'PivotGridControl'Core'PivotGridControlBase.cs:line 3016
   at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
   at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
 InnerException: 

例外2:

System.ArgumentOutOfRangeException was unhandled by user code
HResult=-2146233086
Message=Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
Source=mscorlib
ParamName=index
 StackTrace:
   at System.ThrowHelper.ThrowArgumentOutOfRangeException(ExceptionArgument argument, ExceptionResource resource)
   at System.Collections.Generic.List`1.get_Item(Int32 index)
   at Syncfusion.PivotAnalysis.Base.PivotEngine.PopulatePivotTable() in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Base'Src'Engine'PivotEngine.cs:line 5932
   at Syncfusion.PivotAnalysis.Base.PivotEngine.ResumeComputations(Boolean resetPivotCollections, Boolean shouldRefresh) in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Base'Src'Engine'PivotEngine.cs:line 2735
   at Syncfusion.PivotAnalysis.Base.PivotEngine.ResumeComputations(Boolean resetPivotCollections) in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Base'Src'Engine'PivotEngine.cs:line 2718
   at Syncfusion.PivotAnalysis.Base.PivotEngine.Populate() in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Base'Src'Engine'PivotEngine.cs:line 2829
   at Syncfusion.Windows.Forms.PivotAnalysis.PivotGridControlBase.Populate(PivotEngine pe, Boolean checkLazyLoading) in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Windows'Src'PivotGridControl'Core'PivotGridControlBase.cs:line 2990
   at Syncfusion.Windows.Forms.PivotAnalysis.PivotGridControlBase.<>c__DisplayClass1d.<ApplyRowCols>b__1a(Object sender, DoWorkEventArgs args) in d:'Work_Vol4'svn'studio'trunk'work_area'GridWF'Engineer'PivotAnalysis.Windows'Src'PivotGridControl'Core'PivotGridControlBase.cs:line 3016
   at System.ComponentModel.BackgroundWorker.OnDoWork(DoWorkEventArgs e)
   at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
 InnerException:

我在使用BackgroundWorker时遗漏了什么吗。任何帮助都将不胜感激。

问候,

阿尼什。

使用BackgroundWorker时出现异常

在使用堆栈跟踪和all进行检查时,Populate()方法本身似乎在ResumeComputation()方法之后调用了两次。

位于中的Syncfusion.PivotAnalysis.Base.PopulatePivotTable()d: ''Work_Vol4''svn''studi''trunk''Work_area''GridWF''Engineer''PivotAnalysis.Base''Src''Engine''PivotEngine.cs:line5932Syncfusion。PivotAnalysis。Base。PivotEngine。ResumeComputations(布尔型resetPivotCollections,Boolean should Refresh)d: ''Work_Vol4''svn''studi''trunk''Work_area''GridWF''Engineer''PivotAnalysis.Base''Src''Engine''PivotEngine.cs:line2735 atSyncfusion。PivotAnalysis。Base。PivotEngine。ResumeComputations(布尔型resetPivotCollections)d: ''Work_Vol4''svn''studi''trunk''Work_area''GridWF''Engineer''PivotAnalysis.Base''Src''Engine''PivotEngine.cs:line2718,位于中的Syncfusion.PivotAnalysis.Base.ProtvotEngine.Populate()d: ''Work_Vol4''svn''studi''trunk''Work_area''GridWF''Engineer''PivotAnalysis.Base''Src''Engine''PivotEngine.cs:line2829Syncfusion.Windows.Forms.PivotAnalysis。PivotGridControlBase.Populate(数据透视引擎pe,

您必须避免这种重复的递归调用才能停止此异常。