Refresh forces the component to redraw itself immediately, and it is often not necessary to do this. Invalidate marks the controls surface as invalid, and next time the program is idle (i.e. when you have finished processing) windows will initiate the repaint itself.
Personally I prefer Invalidate. Imagine in a large program you do several things in one loop that require the display to get redrawn. Calling Refresh each time would take time, but once a display is marked invalid you can go on marking it invalid any number of times, it is only redrawn when required.
In a great deal of cases, both work equally well.