Using DoEvents has always been a bit of a lame (though necessary in singlethreaded languages like vb6) way to ensure a UI remains responsive. Write your application in a proper multithreaded manner, using background threading for long running jobs. Have a google for BackgroundWorker, a utility class that makes it simple