此代码允许在加载数据之前加载表单,但在加载数据之前,表单上的某些组件(如按钮和datagridview本身)是“不可见”的。将数据异步加载到数据网格视图中的最佳方式是什么?
我该如何解决这个问题?
private void Form1_Load(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(delegate()
{
this.Invoke(new MyDelegate(delegate()
{
ReadXml(path);
Bind();
}));
}));
t.Start();
}
private void Bind()
{
dataGridView1.DataSource = table;
}
我也有这个其他代码更好,但要求我使用2个新线程。这不可能是做到这一点的最佳方式,可以吗?
private void Form1_Load(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(delegate()
{
this.Invoke(new InvokeDelegate(delegate()
{
Thread t2 = new Thread(new ThreadStart(delegate()
{
ReadXml(path);
}));
t2.Start();
t2.Join();
Bind();
}));
}));
t.Start();
}
如果这是在表单加载时运行的* only *代码,那么所有代码都应该完美并且流畅地运行,imo。在这一点上,有些东西阻碍了你的用户界面。检查出来...... – Tigran 2012-08-15 20:06:46
**或**我看到'Bind()'方法,如果该方法实际上将数据放在UI上,* *可能是阻塞调用。 – Tigran 2012-08-15 20:07:22
这就是我在Form1_Load事件处理程序过程中的所有内容。绑定()只是这样做:dataGridView1.DataSource = table; – 2012-08-15 20:12:29