See the question and my original answer on StackOverflow

You could copy one stream to another using a code like this and insert your progress code in the middle:

Public Shared Sub Copy(ByVal source As Stream, ByVal destination As Stream, ByVal bufferSize As Integer)
    Dim num As Integer
    Dim buffer As Byte() = New Byte(bufferSize  - 1) {}
    Do While (num = source.Read(buffer, 0, buffer.Length) <> 0)
        destination.Write(buffer, 0, num)
        ' insert progress code here
    Loop
End Sub