I have a calculation that can take a while sometimes depending on user input. Sometimes it's instant and sometimes it takes several minutes. I've already implemented a cancel button if the user doesn't want to wait. I'd also like to have a progress bar to display how much longer it will take. I can calculate the progress bar value easily, but I am having trouble with getting it to update. I've tried using: [self.view setNeedsDisplay]; and CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0, YES); but neither seem to be working for me. I've tried running the calculation loop in the background and using: [self performSelectorOnMainThreadselector(progressUpdate) withObject:f waitUntilDone:YES]; where progressUpdate is a new method that accepts "f" as an argument to update the UIProgressView. Does anyone know what the best way to update a progress bar is while the loop that is calculating it is still running? The above things that I tried were suggestions I saw in other threads for similar problems. Thanks. EDIT - I have this working now. I used [NSThread detachNewThreadSelector: ... ]; to start the loop for the calculation. This loop also calculates the value for the progress indicator and stores it in a variable defined in the header file. Then I used another [NSThread detachNewThreadSelector: ... ]; to run a loop on a [self performSelectorOnMainThread: ...]; that set the value of the progress indicator. It did not work if I updated the progress value in the new thread without calling performSelectorOnMainThread. It did not work if I moved the performSelectorOnMainThread to the loop for the calculation and commented out the detachNewThreadSelector for the progress thread. This will work for now, but if anyone know of a better way, please let me know. Also, I don't like running the calculation loop in a new thread as it severely slows down the calculation. This is just with testing on the simulator. I have yet to see what it looks like on the device. Thanks.