The unzipping should be performed off the main thread if you hope to be able to execute UI changes concurrently. UI changes are sent to the end of the message queue on the main thread so they won't execute until the main thread can process messages. If the main thread is bogged down unzipping files, then the UI won't be updated until it's finished doing all that. At that point, all your calls to update the ProgressBar will be executed in rapid succession and you won't be able to see the progress. It'll look like it just snaps to 100%.
From your unzipping thread, call unzipThread.RunOnGuiThread("progressUpdater", Array(d)) where progressUpdater is a method (that accepts an Object as a parameter which you will cast to a Double inside the method) that updates the ProgressBar. Also, make sure that your unzipThread doesn't send too many requests to update the UI too close together or else the UI will update in a jerky, unsmooth manner (or not at all). If the updating is too jerky, keep track of how long ago, in milliseconds, the last update request was sent by the unzipThread and only send another request if the last request was more than 33 milliseconds ago. This amounts to a ProgressBar refresh rate of 30 frames per second. Any faster and the human brain can't really tell the difference and you're just bogging down the UI thread for no added benefit.