Nguyên nhân : do thread ta vừa tạo can thiệp đến các thread khác không hợp lệ .
Vd : Khi ta tạo 1 thread để truy cập thêm vào 1 object(string) cho một listBox . Khi đó , thread này xảy ra xung đột đối với thread của Form .
Cách xử lí : Ta cần sử dụng đến Control.Invoke(Method) để có thể xử lý vấn đề này .
vd :
Giả sử Form1 của ta có các control : button1 , listBox1 ; một hàm AddItem để add 1 item mới cho listBox1 .
void AddItem()
{
listBox1.Items.Add(“a”);
}
button1 có hàm Click như sau :
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(AddItem));
thread.Start();
}
Đối với đoạn code như trên ta sẽ bị báo lỗi thread truy cập không hợp lệ : cross thread operation not valid . Vì thế ta cần sử dụng Controls.Invoke như sau :
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(AddItem));
if(listBox1.InvokeRequired)
listBox1.Invoke(AddItem);
thread.Start();
}