日期:2014-05-18 浏览次数:21194 次
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函数,切换线程。
------解决方案--------------------