In testing, I have found that multi-threaded copying cuts the time to copy multiple files anywhere from twenty to fifty percent over copying the files individually. This holds true whether copying locally, across a LAN or WAN. The TestCopyForm project linked below has a sample application with this class where you can adjust buffer size and specify whether to use multi-threading to copy files or copy them individually. You can test with various combinations to see what works best for your environment.
Multi-Threaded Async File Copy Class
To use this class, add it to your project. When you initialize an instance of the class, pass it either a single file source path and destination path, create a Queue of KeyValueObjects to pass multiple files, or use a simple new object initialization and add the files through the CopyList queue.
Next, add event handlers to your code to handle status updates:
When you write the event handlers, make sure that you use Invoke to interact with the UI thread - the event handlers will be running under the context of one of the FileCopyMTStream threadpool threads. If you try to access a control from that thread, it will throw an error.
When you are ready to kick off the copy, call the following method:
Here is a test project that includes the class:
Here is the class. Enjoy!