これが単純な質問である場合は申し訳ありませんが、私は非常に疲れ果てており、まっすぐに考えています。最近、スレッドをセットアップしましたが、うまく機能しています。ユーザーは作業を実行するアイテムを選択し、選択したアイテムの数に応じて の配列を動的に作成し、Thread
アイテムごとに 1 つのスレッドをディスパッチします。
ただし、あまりにも多くのファイルが選択されていると、ファイルが存在するサーバーが適切に再生されないことに気付きました。作業が必要な項目が 30 ある場合でも、一度に 5 つのアクティブなスレッドしか宣言できないという事実は知っていますが、それについて頭を悩ませることはできません。
PS:私が ThreadPool について説明している場合はお知らせください...私はそれを機能させようとしましたが、.NET のスレッド化の方法にはかなり新しいもので、かなりの時間と運がありませんでした。
現在の方法:
threadedResults = new List<string>[SelectedItems.Count];
List<string> results = new List<string>();
ThreadSettings tsArgs = (ThreadSettings)args;
for (int i = 0; i < SelectedItems.Count; i++)
{
threadedResults[i] = new List<string>();
}
Thread[] threads = new Thread[SelectedItems.Count];
for (int i = 0; i < SelectedItems.Count; i++)
{
KeyValuePair<int, ThreadSettings> threadArgs = new KeyValuePair<int, ThreadSettings>(i, (ThreadSettings)tsArgs);
threads[i] = new Thread(new ParameterizedThreadStart(DoWork));
threads[i].Start(threadArgs);
}
for (int i = 0; i < SelectedItems.Count; i++)
{
if (CommandTask != null)
threads[i].Join();
else
{
// User Cancelled, abort all threads and break
for (int j = 0; j < SelectedItems.Count; j++)
{
threads[j].Abort();
}
break;
}
}
// Gather all results, format and return