You're generally on the right track with the idea of multi-threading in order to perform the file-copy and keeping your UI responsive. But your implementation is a bit far off ;)
Your code isn't showing what's happening in
bw_DoWork()
. The file-copying should take place
there. You don't need the other two threads and the Buffer-class. That's overcomplicating things. Just have a loop that reads from one file a chunk of bytes and writes it to the new file until it's reached the end of the file.
You don't need an Invoke in the Eventhandler-Methods of the BackgroundWorker and you don't need an Application.DoEvents().
For examples of using a BackgroundWorker please take a look here:
http://www.dotnetperls.com/progressbar[
^]
http://stackoverflow.com/a/1068743/4320056[
^]
http://www.codeproject.com/Messages/5050414/Re-WinForms-Update-A-Dialog.aspx[
^]