How is speed always calculated? Distance divided by time. You need to determine the number of bytes received since the last event and the time since the last event, then divide them.
vb.net Code:
  1. Private byteCount As Long
  2. Private timer As Stopwatch
  3.  
  4. Private Sub wc_DownloadProgressChanged(ByVal sender As Object, _
  5.                                        ByVal e As Net.DownloadProgressChangedEventArgs) Handles wc.DownloadProgressChanged
  6.     Me.ProgressBar1.Maximum = CInt(e.TotalBytesToReceive)
  7.     Me.ProgressBar1.Value = CInt(e.BytesReceived)
  8.  
  9.     Dim bits As Long = (e.BytesReceived - Me.byteCount) * 8
  10.     Dim seconds As Double = Me.timer.Elapsed.TotalSeconds
  11.     Dim speed As Integer = CInt(bits / seconds)
  12.  
  13.     Me.StatusLBL.Text = e.ProgressPercentage & "% Complete (" & speed & " bps)"
  14.  
  15.     Me.byteCount = e.BytesReceived
  16.     Me.timer = Stopwatch.StartNew()
  17. End Sub
That's the most accurate current speed calculation possible under the circumstances. If you want average speed then you'd calculate the total number of bytes received and the total time taken.