Como saber se todo o thread do Pool de Threads já foi concluído com suas tarefas?

Eu tenho este aplicativo que recursará todas as pastas em um determinado diretório e procurará PDF. Se um arquivo PDF for encontrado, o aplicativo contará suas páginas usando o ITextSharp. Fiz isso usando um thread para digitalizar recursivamente todas as pastas em busca de pdf; se o PDF for encontrado, ele será colocado na fila do pool de threads. O código fica assim:

//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); }
                    );
            }
        }

Meu problema é: como sei que o thread do pool de threads concluiu o processamento de todos os itens na fila para que eu possa informar ao usuário que o aplicativo foi concluído com a tarefa pretendida?

questionAnswers(2)

yourAnswerToTheQuestion