日期:2014-05-18 浏览次数:21195 次
        DataSet ds = new DataSet(); //全局dataset
        public delegate void GetData();
        private void BindData()
        {
            if (dataGridView1.InvokeRequired) //如果是线程中访问的
            {
                this.BeginInvoke(new GetData(BindData));
                return;
            }
            dataGridView1.DataSource = ds.Tables["stuff"];
        }
        private void Foo()
        {
            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data source=c:\\txl.mdb");
            con.Open();
            string sql = "select * from stuff";
            OleDbDataAdapter da = new OleDbDataAdapter(sql, con);
            ds = new DataSet();
            da.Fill(ds, "stuff");//填充到ds
            BindData();//执行绑定
        }
        private void button8_Click(object sender, EventArgs e)
        {
//创建线程,并执行Foo
            Thread th = new Thread(new ThreadStart(Foo));
            th.Start();
        }
------解决方案--------------------
这个不需要另外开线程吧
不是有BeginXXXX之类的异步方法吗
------解决方案--------------------
用委托的beginInvoke  避免管理线程
 --需要注意 UI元素 需要在主线程才能操作,DataTable查询完成后需要调用Form上的Invoke函数,切换线程。
    
------解决方案--------------------