1

我想要做的是创建一个函数来读取文件的所有内容和正则表达式。到目前为止我所做的是创建了一个函数

读取内容(字符串文件名);

但在此功能之前,我要求用户选择一个目录,然后读取其中存在的所有文件名

DirectoryInfo dir = new DirectoryInfo(dirPath);
foreach (FileInfo file in dir.GetFiles())
{
save in array
}

我已经开始了一个线程

 var t = new Thread(() => read_content(filename));
  t.Start();

这一切都很好,现在我想让它成为多线程,现在它是单线程

我希望用户像开始 10 线程一样输入,这些线程一次读取一个文件,直到到达结束

我尝试在谷歌上搜索,但找不到我需要的,我不想要整个代码只是告诉我逻辑或一些基本代码,想自己学习和编码

编辑:似乎我对线程池有更多的投票,所以一个好的 tut 链接将不胜感激

4

3 回答 3

3

您可以使用任务并行库

你不应该手动设置线程的数量——你应该让系统来处理这个问题。TPL 会为您执行此操作,因此只需创建任务,它们最终将被执行。通常,每个核心执行一个任务(虽然不确定)。

你的代码可能是这样的:

DirectoryInfo dir = new DirectoryInfo(dirPath);
foreach (FileInfo file in dir.GetFiles()) {
    var filename = file.FullName;
    new Task(() => {
        read_content(filename);
    }).Start();
}

注意:您的代码不会检查线程何时完成,所以我也没有包含这个。如果你想要这个,你必须将任务保存在一个列表中,并检查任务是否已经完成。

于 2013-07-10T09:51:29.590 回答
0

您可以使用ThreadPool类并调用File.ReadAlltext每个文件(:

于 2013-07-10T09:49:12.880 回答
0

采用

ThreadPool.QueueUserWorkItem(<method>, <obj_arg>);

这将重用线程并且不会为每个文件创建线程。您可以在 foreach 结束时执行 Join。

thread.Join();

您是否考虑过使用 C# 5 的异步功能

于 2013-07-10T09:51:21.263 回答