It remains blocked because you're using the UI thread to request data, which can take a long time to complete, hence the thread is blocked and cannot therefore update the button. There is only one thread to update the UI, which works like a queue.
You can use a background worker to fix that, have a look here: