问一个菜鸟问题
winfrom 程序一个 静态的List集合
我是用的多线程 一个线程删除 ListInfo.Remove(ListInfo[i]);
一个线程获取执行修改 先查找到序号 ListInfo[i].id = "";
这里会不会出现一个问题 我先查找的序号,然后第一个线程执行删除 把这个序号变了(实现上我的理解是不是第一个线程执行删除List里的一个对象,那我之前取到的序号是不是也变了?)
那不是我在执行修改的时候 会修改成其他的?有点急,希望大家帮帮忙. 多线程listc#
winfrom 程序一个 静态的List集合
我是用的多线程 一个线程删除 ListInfo.Remove(ListInfo[i]);
一个线程获取执行修改 先查找到序号 ListInfo[i].id = "";
这里会不会出现一个问题 我先查找的序号,然后第一个线程执行删除 把这个序号变了(实现上我的理解是不是第一个线程执行删除List里的一个对象,那我之前取到的序号是不是也变了?)
那不是我在执行修改的时候 会修改成其他的?有点急,希望大家帮帮忙. 多线程listc#
然后读写ListInfo都要使用它互斥,例如lock(LockFlag)
{
var x = ListInfo[i];
ListInfo.Remove(x);
}
注意,不仅仅是写,往往在读ListInfo的时候也需要。
我的测试代码是这样的
先执行这个线程
lock (UserInfo.List)
{
for (int i = 0; i < UserInfo.List.Count; i++)
{
if (UserInfo.List[i].Name == 5 + "张三")
{
Thread.Sleep(5000);
UserInfo.List[i].Id = 900000000;
// UserInfo.List[i].Name = "王五";
break;
}
}
dataGridView1.DataSource = null;
dataGridView1.DataSource = UserInfo.List;
}然后
UserInfo.List.Remove(UserInfo.List[1]); dataGridView1.DataSource = null;
dataGridView1.DataSource = UserInfo.List;
发现修改的错误 不是我想修改的.哎悲剧了,其他什么集合好用哎,hashtable好像没得排序得 有点悲剧.