跨執行緒呼叫Windows窗體控制元件
當我們需要處理大量資料時,為了使窗體介面不出現假死狀態,需要使用多執行緒進行處理。
當利用執行緒池ThreadPool.QueueUserWorkItem(t=>{ });進行多執行緒處理時,如果{ }中有控制元件(textbox,combox.....),程式就會報錯:不允許跨執行緒呼叫windows窗體控制元件,這時候我們使用delegate委託進行窗體控制元件的呼叫。
(1)如果控制元件出現在if()判斷條件裡面
delegate void ReadTextValue();
private void btn_Input_Click(object sender, EventArgs e)
{
ReadTextValue readtext = new ReadTextValue(CmbQueryValue);
ThreadPool.QueueUserWorkItem(p =>
{
if (cmbQuery.InvokeRequired)
{
cmbQuery.Invoke(readtext);
.....................
}
});
}
private void CmbQueryValue()
{
cmbQuery.Text = "物料編碼";
}