想在后台执行一个方法返回一个DataTable然后在把这个datatable绑定到GridView上。用backgroundWorker如何实现?

解决方案 »

  1.   

    记住一点,访问界面时候要调用界面的Invoke或BeginInvoke方式同步ui线程。其他的就是照一般函数写就行。
      

  2.   

    private void button5_Click(object sender, EventArgs e)
    {
        BackgroundWorker bw = new BackgroundWorker();
        bw.DoWork += delegate
        {
            DataTable table = new DataTable();
            //准备DataTable
            //...
            //更新ui
            this.Invoke((EventHandler)delegate
            {
                this.dataGridView1.DataSource = table;
            });
        };
        bw.RunWorkerAsync();
    }
      

  3.   

    简单点的话大概这样Thread thread = new (
     delegate
     {
        //datable操作
         //绑定,非UI线程不能直接访问控件,用Invoke
        this.Invoke(new Action<DataTable>(DataBind), new object[] { table});
     });
    thread.start():       private void DataBind(DataTable table)
            {
                dataGridView1.DataSource = table;
            }
      

  4.   

    Backgroundworker worker=new Backgroundworker();
    worker.RunWorkerAsync();
    worker.DoWork+=new DoWorkEventHandler(backgroundWorker1_DoWork);private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        //后台执行事务
        e.Resoult//返回执行结果
    }
      

  5.   

    private void button5_Click(object sender, EventArgs e)
    {
        BackgroundWorker bw = new BackgroundWorker();
        bw.DoWork += delegate
        {
            DataTable table = new DataTable();
            //准备DataTable
            //...
            //更新ui
            this.Invoke((EventHandler)delegate
            {
                this.dataGridView1.DataSource = table;
            });
        };
        bw.RunWorkerAsync();
    }