当前位置: 代码迷 >> Silverlight >> WPF应用BackgroundWorker操作DataTable报错
  详细解决方案

WPF应用BackgroundWorker操作DataTable报错

热度:4147   发布时间:2013-02-26 00:00:00.0
WPF使用BackgroundWorker操作DataTable报错
我在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)
  相关解决方案