1

多数のファイル(〜10,000)を含むディレクトリがいくつかあります。アプリでこれらのファイルのリストを作成したいのですが、ロード中にアプリがフリーズしないように、すでにioアクセスをスレッド化しています。ただし、すべてのファイルが読み込まれる前にアプリを終了すると、dirInfo.GetFiles(...)の呼び出しが完了するまで、スレッドは.Join()に応答しません。

// ... 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。

4

2 に答える 2

1

ThreadPoolクラスのスレッドを使用する必要があります。これにより、バックグラウンドスレッドになり、アプリケーションを閉じるときにThreadInteruptExceptionを受け取る必要があります。

于 2009-01-22T10:09:09.140 に答える
0

アプリケーションが閉じようとしているときに ( Joinの前に) Thread.Abort()を呼び出すことができます。

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

また、必要に応じて、スレッド メソッドで をキャッチし、ThreadAbortExceptionファイナライズ/クリーニングを実行することもできます。

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
}
于 2009-01-22T10:59:08.523 に答える