Задача разбивается на куски.
Делается функция которая выполняет один кусок.
Делается таймер. посылается.
На таймер вешается вот это делание одного куска задачи.
Ну и если надо прервать, то по какому-то условию (нажатие кнопки и т.п.) убивается таймер.
При этом заметь, что все кнопки будут таки работать.
Это получается так, заполнять какой-то стрек, а уже таймер должен его разгребать?