Проблема в том, что вы выполняете пользовательский интерфейс. Вы должны вернуться в поток пользовательского интерфейса, чтобы сделать это. Все, что я мог бы порекомендовать, это немного рисовать, позволяя потоку пользовательского интерфейса обрабатывать любые события, рисовать снова немного.
Вероятно, это лучший способ, но это нелегко сделать ... Намного проще, чем просто запускать задания без пользовательского интерфейса в другом потоке ...