我想用多线程加速我的工具来读/写文本文件 我在这里开始 - 我想我需要7个线程
for (int i = 0; i < 7; i++)
{
Thread thread = new Thread(() => process(files[i], i));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
我的功能
void process(string file,int threadnumber)
{
// display thread number
// filter text
// read - write
}
但是当我开始时:
Thread: 3 start
Thread: 3 start
Thread: 3 start
Thread: 4 start
Thread: 5 start
Thread: 6 start
Thread: 7 start
为什么我的工具不启动线程1 2 3 4 5 6 7 ..几个线程重复 - 意味着读写相同的文件和错误。
请给我建议。
答案 0 :(得分:0)
根据循环迭代的速度和线程的启动速度,有可能在线程实际启动时i
变量可能已经发生变化。
您必须为每个线程声明一个未更改的新变量:
for (int i = 0; i < 7; i++)
{
int j = i; //New variable set to the current 'i'.
Thread thread = new Thread(() => process(files[j], j));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
在上面,j
- 变量将获得与当前i
相同的值,并且即使循环继续迭代也不会发生变化。