一个在百度上都找不到答案的问题--集合在枚举数实例化后进行了修改
年终公司开年会,节目上有个抽奖节目,公司要求用程序随机抽取中奖者,因为抽奖者众多,我用了多线程来进行开发,我的大概思路是这样的:主界面上有5列,每列有13个Label存放待抽奖者,每个线程控制一列,当按下开始按钮时,5个线程同时启动,每个线程通过如下方法为Label赋值:
if (Thread.CurrentThread.ManagedThreadId == t2.ManagedThreadId)
{
while (true)
{
int z = 0;
Random a = new Random();
for (int i = 14; i <= 2 * 13; i++)
{
z = a.Next(200, 400);
((Label)(panel2.Controls.Find("L" + i.ToString(), true)[0])).Text = GetStaff.arrStaff[z].ToString();
}
Thread.Sleep(100);
}
}
这样一旦启动线程,Label上的名字就实现变换,当按下停止按钮的时候,线程终止,Label上的Text就是中奖者,但问题来了,在启动一个线程的时候,这个做法没问题,但在5个线程一起开的时候,运行时会报一个异常:集合在枚举数实例化后进行了修改.这句话什么意思??异常那句就是((Label)(panel2.Controls.Find("L" + i.ToString(), true)[0])).Text = GetStaff.arrStaff[z].ToString();
其中GetStaff类是用来读取员工名单的一个txt文件,类代码如下class GetStaff
{
public static string[] GetStaffInfo()
{
string[] staff = File.ReadAllLines(@"StaffSources.txt",Encoding.Default);
return staff;
}
public static ArrayList arrStaff = new ArrayList(GetStaffInfo());
}
请问是什么原因导致异常?急求解决办法!谢谢