your code example is correct but it doesn't solve the problem. If you click on the button during ProgressBar is filling you don't create a new thread, it starts the Execute method from the begin only (same Thread-ID). Each click on the button should create a new thread that also runs to the end before the next is executed (various Thread-ID)!