相关疑难解决方法(0)

如何知道所有线程池的线程是否已完成其任务?

我有这个应用程序将递归给定目录中的所有文件夹并查找PDF.如果找到PDF文件,应用程序将使用ITextSharp对其页面进行计数.我这样做是通过使用一个线程递归扫描所有文件夹的pdf,然后如果找到PDF,这将排队到线程池.代码如下所示:

//spawn a thread to handle the processing of pdf on each folder.
                var th = new Thread(() =>
                {
                    pdfDirectories = Directory.GetDirectories(pdfPath);
                    processDir(pdfDirectories);
                });
                th.Start();



 private void processDir(string[] dirs)
        {
            foreach (var dir in dirs)
            {
                pdfFiles = Directory.GetFiles(dir, "*.pdf");
                processFiles(pdfFiles);

                string[] newdir = Directory.GetDirectories(dir);
                processDir(newdir);
            }
        }



private void processFiles(string[] files)
        {
            foreach (var pdf in files)
            {
                ThreadPoolHelper.QueueUserWorkItem(
                    new { path = pdf },
                    (data) => { processPDF(data.path); }
                    );
            }
        }
Run Code Online (Sandbox Code Playgroud)

我的问题是,我怎么知道线程池的线程已经完成处理所有排队的项目,所以我可以告诉用户应用程序完成了它的预期任务?

.net c# multithreading threadpool

7
推荐指数
1
解决办法
5855
查看次数

标签 统计

.net ×1

c# ×1

multithreading ×1

threadpool ×1