【发布时间】:2009-11-25 19:52:14
【问题描述】:
我在表单上有一个后台工作人员,我在其中编写了一些长期运行的数据库交互。
当我单击表单上的按钮时,会运行以下命令:
if (!bwFind.IsBusy)
bwFind.RunWorkerAsync(param);
其中 bwFind 是 BackgroundWorker,param 是 DevExpress CriteriaOperator。
我在 Progress_Changed 事件处理程序中更新了一个进度条。
我在 RunWorkerCompleted 事件处理程序中执行以下操作:
dataGrid.DataSource = this.dataObject;
dataGrid.Refresh();
label1.Text = this.dataObject.Count.ToString(); // problem appears here
问题是,我在指出的行中得到了 Null Ref 异常,但是我在 DoWork 方法的末尾实例化了该对象。
我知道 DoWork 没有运行,因为如果我在使用它之前进行空值检查,请再次按下表单上的按钮...它会运行,并且一切正常。
也许我没有正确使用 BackgroundWorker,但每当我使用该组件时,这种情况经常发生。
【问题讨论】:
-
这很明显我敢肯定,但是当异常被抛出时你已经检查了 this.dataObject 的值对吗?
-
它肯定是空的,但关键是它不应该是空的。它是在 DoWork 中设置的(由于跨线程操作而退出)
标签: c# .net backgroundworker