2015-01-01 3 views
-1

Я работаю с C# winform У меня есть список файлов. С циклом мне нужно загрузить все файлы (5000 изображений) на другой сервер, как я могу реализовать его с помощью многопоточности И еще как я могу узнать, когда один поток завершен, а затем использовать его для следующего файла, ожидающего загрузки, должен ли я использовать класс монитора?C# threading для загрузчика файлов

ответ

2

Вы можете использовать PLINQ для этого:

IEnumerable<string> yourFiles = new[]{ "C:\\file.txt", "D:\\data.dat" }; 
int numberOfThreads = 10; 

yourFiles.AsParallel().WithDegreeOfParallelism(numberOfThreads).ForAll(UploadFile); 

private static void UploadFile(string file) 
{ 
    // do the actual uploading 
} 
+0

Вам нужно будет по крайней мере .NET 4 –

+1

Да, действительно. Ему нужна версия .NET, которая не старше ** 2010 **. Я не думал, что это важно в ** 2015 **. – nvoigt

+0

Я просто добавил комментарий в качестве примечания. Вы будете удивлены, сколько корпоративных приложений по-прежнему используют .NET 2 или 3.5 –

2

Может Parallel.For что-то для вас. Это простой в использовании. Вы знаете, когда поток завершен, потому что вы можете добавить некоторую переменную в конец вашего метода в другом потоке. Что-то вроде ManualResetEvent. Я думаю, что Parallel.For - это поститься. Вы также можете использовать пул потоков. Прочтите через веб-сайты Microsoft.

Parallel.For (.NET 4)
For(Int32, Int32, Action<Int32>)

ThreadPool (.NET 2)
ThreadPool.QueueUserWorkItem(waitCallback)