Most efficient/accurate way to download/upload with progress and speed in C#?
<p>Uploading and downloading a file is easy enough. Doing so while displaying progress and a transfer rate has me questioning the best way to do it. I'm looking for that one perfect way. The method that's easy to use, accurate, and light weight. Tried and true.</p>

<p>The situation I'm talking about is, for example, downloading a file from a WebResponse or some other stream based transfer. Downloading it is as simple as (4.0 here):</p>

<pre><code>HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Stream bufferedresponse = new BufferedStream(response.GetResponseStream());
bufferedresponse.CopyTo(TargetStream);
bufferedresponse.Close();
</code></pre>

<p>You can't find a transfer rate until after it's done downloading, and even that is just an average. I'm thinking a touch more instantaneous. I don't always need an entire WebBrowser object, especially in REST API wrappers (where this particular sample is from), besides, doesn't WebBrowser also attempt to parse DOM and render it's content?</p>

<p>Are there binding techniques or simple multi-threaded approaches to this? Are there attributes/events of a stream class I'm overlooking? Another class entirely?</p>
