1. 程式人生 > >跨執行緒呼叫Windows窗體控制元件

跨執行緒呼叫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 = "物料編碼";        
        }