En mi opinión personalísima y podría estar equivocado, en estos casos suele ser mejor estrategia utilizar otra aproximación quizás html+jquery/ajax+css. Si pruebas el mismo código en WPF te darás cuenta que va de maravilla (con las modificaciones que comentaba más arriba).
Off topic: Una buena práctica es que cuando utilices operaciones asíncronas, compruebes que no hubo un error y que tampoco fue cancelada (aunque no le des al usuario la opción de cancelar por el momento).
Eliel Aguilera Microsoft Student Partner - Venezuela Blog