我試着去填充從SQL的查詢datagridview的,但它需要很長的時間,什麼即時試圖做的是顯示一個.gif「加載」同時被填充網格,使用im線程但.gif凍結,如果我使用CheckForIllegalCrossThreadCalls = false;
datagridview不加載滾動條行爲怪異。這裏是我的代碼螺紋C#填入datagridview的
delegate void CambiarProgresoDelegado();
按鈕單擊
private void btn_busca_Click(object sender, EventArgs e)
{
pictureBox1.Visible = true;
thread= new Thread(new ThreadStart(ejecuta_sql));
thread.Start();
}
方法
private void ejecuta_sql()
{
if (this.InvokeRequired)
{
CambiarProgresoDelegado delegado = new CambiarProgresoDelegado(ejecuta_sql);
object[] parametros = new object[] { };
this.Invoke(delegado, parametros);
}
else
{
myConnection.Open();
SqlCommand sql_command2;
DataSet dt2 = new DataSet();
sql_command2 = new SqlCommand("zzhoy", myConnection);
sql_command2.CommandType = CommandType.StoredProcedure;
sql_command2.Parameters.AddWithValue("@FechaIni", dateTimePicker1.Value.ToShortDateString());
sql_command2.Parameters.AddWithValue("@FechaFin", dateTimePicker2.Value.ToShortDateString());
SqlDataAdapter da2 = new SqlDataAdapter(sql_command2);
da2.Fill(dt2, "tbl1");
grid_detalle.DataSource = dt2.Tables[0];
myConnection.Close();
pictureBox1.Visible = false;
}
和.gif文件凍結,直到該線程完成他的工作。
謝謝!!像魅力一樣工作,所以我只使用Invoke來更新主線程的UI? – user2615105
這是正確的。 「工作」是在您創建的線程上完成的,只有UI_的_updates被調用,導致它們在主UI線程上運行。 –