当我们需要处理大量数据时,为了使窗体界面不出现假死状态,需要使用多线程进行处理。
当利用线程池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 = "物料编码";
}