今天多线程操作listview时VS抛出一个错误:线程间操作无效: 从不是创建控件"VisurList"的线程访问它
百度了一下,原来是C#默认禁止跨线程访问控件。也就是说每个线程默认只能访问自己创建的控件。想要安全的跨线程访问控件,就必须用到委托
private delegate void AddVirus(string name);
//声明一个委托。当然AddVirus是什么都可以,自己取。括号内的参数也根据实际情况自己决定
void SearchVirus(string path)
{
if (VirusList.InvokeRequired)//判断VirusList这个控件是不是该线程创建的,如果为true则不是
{
AddVirus add = new AddVirus(SearchVirus);//实例化委托
VirusList.Invoke(add, path);//重新调用
}
else
{
VirusList.Items.Add(filename);//如果VirusList是该线程创建的,则执行添加操作
}
}