2015-01-01 49 views
-1

我用C#的winform 工作,我有。随着一个循环,我需要的所有文件(5000个图像)上传到另一台服务器上的文件列表我怎么能与多线程 而另一位执行它点如何知道一个线程何时完成,然后将其用于等待上传的下一个文件?是否需要使用监视器类?文件上传C#线程

回答

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

是的,确实如此。它确实需要一个不比** 2010 **更早的.NET版本。我不认为这在** 2015 **中很重要。 – nvoigt

+0

我刚刚添加了评论作为一个说明。您会惊讶到有多少企业应用程序仍然使用.NET 2或3.5 –

2

也许是的Parallel.For东西给你。它很容易使用。你知道线程何时完成,因为你可以在另一个线程的方法末尾添加一些变量。类似于ManualResetEvent。我认为Parallel.For是禁食执行。您也可以使用线程池。通过微软网站阅读。

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

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