此代碼允許在加載數據之前加載表單,但在加載數據之前,表單上的某些組件(如按鈕和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