C#和多线程逻辑

C#和多线程逻辑,c#,multithreading,file,C#,Multithreading,File,我想做的是创建一个函数,读取文件和正则表达式的所有内容。 到目前为止,我所做的是创建一个函数 读取内容(字符串文件名) 但在此函数之前,我要求用户选择一个目录,然后读取其中存在的所有文件名 DirectoryInfo dir = new DirectoryInfo(dirPath); foreach (FileInfo file in dir.GetFiles()) { save in array } 我已经开始了一个线程 var t = new Thread(() => read_c

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

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

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

DirectoryInfo dir = new DirectoryInfo(dirPath);
foreach (FileInfo file in dir.GetFiles())
{
save in array
}
我已经开始了一个线程

 var t = new Thread(() => read_content(filename));
  t.Start();
这一切都很好,现在我想让它多线程,现在它的单线程

我希望一个用户输入像START10线程,这些线程一次读取一个文件,直到最后一个线程到达末尾

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

编辑:似乎我对threadpool投了更多的票,所以如果能给我一个好的tut链接,我将不胜感激

您可以使用该类并调用
文件。每个文件上的ReadAlltext
(:

使用

ThreadPool.QueueUserWorkItem(<method>, <obj_arg>);
您是否考虑过使用C#5的异步功能?您可以使用

你不应该手动设置线程的数量——你应该让系统来处理这个问题。TPL为你做这件事,所以只需创建任务,它们最终就会被执行。通常,每个核心执行一个任务(但不确定)

您的代码可能如下所示:

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

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

对于每个文件和每个文件,将任务添加到线程池,这并不完美,但应该可以在没有很多代码行的情况下工作;]@wudzik谢谢你的回复,但我会的nt想要创建100个线程如果文件夹中有100个文件,我只想要10-15个线程工作,逐个读取…@aki003您可以在ThreadPool中设置maxthreads,或者另一个解决方案将所有文件名的1/10传递给ThreadPool中的一个线程:D@wudzik有适合初学者的好教程吗???@aki003,这是微软风格的教程(代码多,逻辑少),但它解释了threadpool,足以在这种简单的方法中使用它+1。作为奖励,与PLINQ相当:
dir.GetFiles().aspallel().ForAll(file=>read_content(file.FullName));
:)
DirectoryInfo dir = new DirectoryInfo(dirPath);
foreach (FileInfo file in dir.GetFiles()) {
    var filename = file.FullName;
    new Task(() => {
        read_content(filename);
    }).Start();
}