This code has a few issues

The `WebClient` and `ManualResetEvent` are never disposed if `bytesToDownload` is set, same goes for the `ReadAndWriteFromStream` method, if the FileStream throws, the writer is not properly disposed.

Also it doesn't report the download progress.