I have been having a small problem that I can’t by-pass it, I keep trying to change the way I get the file, but I end up having the same problem

My idea is that I have an .xml file that I download and that has a list of files to download and install.
I get the .xml file fine, extract it and start download files… the 1st goes very well, the 2nd sometimes get timeout … problem is… after the timeout error, it does continue and install that hanged file, but it will freeze the entire app while hanging into timeout exception.
the code idea is that I need to know where are we in downloading the file, so I used this idea.
I also found out that WebClient and WebRequest have a strange timeout issue when dealt in a multithread environment.
What’s the best pattern to, in a window form, download files (several files) and output the percentage while downloading?
So I can do something about this, and I’m getting out of ideas …
My latest question was also related to this issue.
What about using something like this open source C# downloader tutorial. It provides segmented downloading of files over http and ftp (with several other options). It provides feedback and it’s all wrapped in a developer friendly API.