C#多线程和读/写大文本文件

时间:2016-07-09 11:47:09

标签: c# multithreading

我想用多线程加速我的工具来读/写文本文件 我在这里开始 - 我想我需要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 ..几个线程重复 - 意味着读写相同的文件和错误。

请给我建议。

1 个答案:

答案 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相同的值,并且即使循环继续迭代也不会发生变化。