解决方案 »

  1.   

    委托,使用委托更行datagridview
      

  2.   

    定义个委托函数,写个处理函数。
    private delegate void function(type parameter);
    void func(type parameter)
    {
    ……;
    }
    function ft = new function(func)();
    this.invoke(ft,para);
      

  3.   

    声明一个公共变量datatable    在它的RunWorkerCompleted事件中赋值给datagridview
    参见:http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.aspx
      

  4.   

    backgroundWorker是执行异步任务的,DoWork事件是开始执行具体的任务,其参数的Result为结果对象可以设置你的任务完成后的对象,任务完成的后解引发Completed事件,在此事件的参数的Result对象即为DoWork完成时的Result参数,这样就可以将任务的结果传递出来
      

  5.   

            #region 多线程 进度条 对比文档
            private void work_BW(BackgroundWorker bk)
            {
                #region excel处理
                Type type;
                type = Type.GetTypeFromProgID("ET.Application");//V8版本类型
                if (type == null)//没有安装V8版本
                {
                    type = Type.GetTypeFromProgID("Ket.Application");//V9版本类型
                    if (type == null)//没有安装V9版本
                    {
                        type = Type.GetTypeFromProgID("EXCEL.Application");//MS EXCEL类型
                        if (type == null)
                        {
                            MessageBox.Show("没有安装Office软件");
                            return;//没有安装Office软件                     
                        }
                    }
                }
                dynamic app = Activator.CreateInstance(type);//根据类型创建App实例
                app.Visible = false;//后台打开,不显示Excel界面
                dynamic workbook = app.Workbooks.Open(OFD_1.FileName);//打开aaa.xls文件
                dynamic worksheet = workbook.Worksheets[1];//获取Sheet1工作薄            //创建DateTable
                System.Data.DataTable table = new System.Data.DataTable("table");            int rows = worksheet.UsedRange.Rows.Count;
                int columns = worksheet.UsedRange.Columns.Count;            for (int i = 1; i <= rows - 1; i++)
                {
                    bk.ReportProgress(i);
                    DataRow row = table.NewRow();
                    for (int j = 1; j <= columns; j++)
                    {
                        dynamic range = worksheet.Range[app.Cells[i + 1, j], app.Cells[i + 1, j]];
                        range.Select();
                        if (i == 1)
                        {
                            DataColumn column = new DataColumn();
                            column.DataType = System.Type.GetType("System.String");
                            column.ColumnName = worksheet.Cells[i, j].Value2;
                            table.Columns.Add(column);
                        }
                        row[j - 1] = app.ActiveCell.Text.ToString();
                    }
                    table.Rows.Add(row);
                }
                //传出table            #endregion            //绑定dataGridView
                dataGridView1.DataSource = table;
            }
            private void BW_DoWork(object sender, DoWorkEventArgs e)
            {
                //调用
                work_BW(this.BW);
            }
            private void BW_ProgressChanged(object sender, ProgressChangedEventArgs e)
            {
                //响应进度条消息
                this.pgb_jindutiao.Value = e.ProgressPercentage;        
            }
            private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                System.Threading.Thread.Sleep(500);//停止500毫秒
                //打开按钮启用
                but_dakai.Enabled = true;
                //操作按钮文本=对比
                but_caozuo.Text = "对比";
                //操作按钮禁用
                but_caozuo.Enabled = false;
                //隐藏进度
                pgb_jindutiao.Visible = false;
        
                //this.dataGridView1.DataSource = e.Result;
            }
            #endregion
      

  6.   


    public   System.Data.DataTable table = new System.Data.DataTable("table");RunWorkerCompleted 事件中
    this.dataGridView1.DataSource = table;
      

  7.   

    已解决。        //公共变量
            dynamic datatab = null;
            private void work_BW(BackgroundWorker bk)
            {
                //省略...
                datatab = table;
            }
            private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
        //省略...
                this.dataGridView1.DataSource = datatab;
            }
      

  8.   

    已解决。        //公共变量
            dynamic datatab = null;
            private void work_BW(BackgroundWorker bk)
            {
                //省略...
                datatab = table;
            }
            private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
        //省略...
                this.dataGridView1.DataSource = datatab;
            }

    你的是VB,我那个声明是C#的,应该能理解的。
      

  9.   

    已解决。        //公共变量
            dynamic datatab = null;
            private void work_BW(BackgroundWorker bk)
            {
                //省略...
                datatab = table;
            }
            private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
        //省略...
                this.dataGridView1.DataSource = datatab;
            }

    你的是VB,我那个声明是C#的,应该能理解的。
    我也是C# ,我现在WinForm做Excel二次开发。