Okay, some questions.

Where are you recalculating the value of Percentage? I don't see that in your code snippet. You have to recalculate the Percentage each iteration through the loop BEFORE you call ReportProgress(). This is probably the issue, i.e. it's calling ReportProgress more than once, but since it's always passing the same value, it doesn't LOOK that way.

If that isn't it, then these questions become relevant.

How big is the file you are downloading, and how big is the buffer you are using?

Does it download the file successfully?

Why do you have a 1 - 100 for loop? Are you trying to download the file 100 times?

Finally, set breakpoints and step through it as it runs. Try and get an idea what is really happening.