запись всех файлов в большой каталог - PullRequest
1 голос
/ 22 января 2009

У меня есть несколько каталогов с большим количеством файлов в них (~ 10000). Я хочу создать список этих файлов в своем приложении, и я уже ввел в него доступ через io, чтобы приложение не зависало во время загрузки. Однако если я выйду из приложения до загрузки всех файлов, поток не ответит на .Join (), пока не завершится вызов dirInfo.GetFiles (...):

// ... mythread
    DirectoryInfo dirInfo = new DirectoryInfo(path);
    foreach(FileINfo file in dirInfo.GetFiles(extension)) 
    {
        // with large directories, the GetFiles call above 
        //    can stall for a long time
        ...

Кэширование файлов из foreach просто решает проблему. Мне нужен какой-то многопоточный способ обратного вызова для поиска файлов в каталоге, и я не уверен, как это сделать. Любая помощь будет оценена.

Большое спасибо, tenpn.

Ответы [ 2 ]

1 голос
/ 22 января 2009

Вы должны использовать Thread из класса ThreadPool. Это сделает его фоновым потоком, и оно должно получить ThreadInteruptException при закрытии приложения.

0 голосов
/ 22 января 2009

Вы можете позвонить Thread.Abort () , когда ваше приложение будет закрыто (до Join ).

myThread.Abort();
// Wait for myThread to end.
myThread.Join();

Кроме того, вы можете перехватить ThreadAbortException в методе thread и выполнить некоторую финализацию / очистку, если необходимо.

try {
    DirectoryInfo dirInfo = new DirectoryInfo(path);
    foreach(FileINfo file in dirInfo.GetFiles(extension)) 
    {
        // with large directories, the GetFiles call above 
        //    can stall for a long time
        ...
    }
}
catch (ThreadAbortException e)
{
    // cleaning
}
...