我在UserControl的Load事件中初始化一个BackgroundWorker,并定义了相关事件,代码如下:
this._bgWorkor = new BackgroundWorker();
this._bgWorkor.WorkerReportsProgress = true;
this._bgWorkor.DoWork += new DoWorkEventHandler(_bgWorkor_DoWork);
this._bgWorkor.ProgressChanged += new ProgressChangedEventHandler(_bgWorkor_ProgressChanged);
this._bgWorkor.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_bgWorkor_RunWorkerCompleted);
然后获取到一个DataTable数据表,并作为参数传递到DoWork中,在DoWork中遍历该DataTable,将遍历的每一行记录都传递到ProgressChanged中,并将该记录添加到另外一个结构相同的DataTable中,错误就出现在这个时候,添加到DataTable中的时候总是提示“未将对象引用设置到对象的实例。”
具体代码如下:
void _bgWorkor_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (e.ProgressPercentage > 0)
{
DataRow dr = (DataRow)e.UserState;
object[] items = new object[dr.ItemArray.Count()];
dr.ItemArray.CopyTo(items, 0);
//执行到下面这一句就提示那个异常错误了
this._DtGuests.Rows.Add(items);
this.spInfo.Content = new TextBlock
{
Text = items[6].ToString(),
Foreground = Brushes.Red,
VerticalAlignment = VerticalAlignment.Center
};
//this.Dispatcher.BeginInvoke(new Action(() =>
//{
//}));
}
}
void _bgWorkor_DoWork(object sender, DoWorkEventArgs e)
{
DataTable dtGuest = (DataTable)e.Argument;
foreach (DataRow dr in dtGuest.Rows)