Ich versteh das nicht ganz, du scheinst ja gar keine MarqueeProgressBar zu verwenden, sondern eine normale
Wenn du eine MarqueeProgressBar verwendest brauchst du doch gar nicht von Position 0-100 zu kommen. Außerdem ist es wenig bis gar nicht zweckdienlich auf einem Splash Screen eine normale Progressbar anzuzeigen, denn wie schon gesagt weiß man ja nicht wann das Programm denn wirklich fertig ist. Wenn man bei einer Progressbar nicht abschätzen kann wie lange es noch dauert kann man sie sich sparen!
Warum benutzt du die MarqueeProgressBar nicht einfach so wie sie vorgesehen ist? Einfach auf ein Formular, Timer dazu, der alle 50 ms die Bar eins erhöht und fertig.
Und wenn du jetzt nicht irgendwelche Thread-Geschichten anfangen willst dann benutze doch einfach die Windows Threads: Pack den Splash Screen in ne eigene Exe, dann startest du die bei Programmstart (evtl mit Parameter) und vor dem Aufruf des Hauptformulars schließt du die Splash-Screen Exe wieder. Fertig. So hast du keine Probleme mit Refresh/Processmessage etc., da die exe alles selbst verwaltet.
Ach so: Benutzt nie nie nie Sleep bei nem Splash Screen. Splash Screens sollen dem Benutzer bei längeren Programm-Starts zeigen dass noch was passiert und nicht dafür sorgen, dass der Programm Start länger dauert^^