Überleg mal wie Windows Funktioniert. Windows arbeitet nachrichtenorientiert. Und wenn sich dein Fenster jetzt neu zeichenen muß, bekommt es von Windows eine Nachricht, diese holt dein Programm ab und zeichnet sich entsprechend neu.
So, wenn dein Programm jetzt am Packen ist, ist es beschäftigt und nicht in der Lage seine Nachrichten abzuholen geschweige denn zu verarbeiten. Ergo bleibt Windows nichts anderes übrig als den teil des Desktops weiß darzustellen, weil dein Programm nicht in der Lage ist sich zu aktualisieren und Windows natürlich nicht weiß, was es darstellen soll.
Eine Möglichkeit wäre, wenn deine Packroutine in einer Schelief liegt Application.Processmessages aufzurufen. Das sorgt dafür, dass dein Programm in die Nachrichtenschleife kuckt unmd eventuell anliegenden Nachrichten verarbeitet. Man sollte damit aber vorsichtig umgehen, da, wenn viele Nachrichten anliegen, die Performanz logischerweise leidet.
Besser wäre es, auch wenn deine Packroutine eine Schleife ist, das ganze in einen Thread auszulagern. Was anderes wird dir auch nicht übrigbleiben, wenn du eine DLL zum Packen benutzt und an den Pack-Code nicht dran kommst.