1-й решите, закончите ли вы задачи, которые выполняет обратный вызов, или откатите их.Поэтому, если вы решите завершить задачи, вы выполните обратный вызов до конца.Время должно быть отменено в OnStop уже.Если вы перейдете ко второй опции (откат), ваш код будет выглядеть примерно так:
bool shouldAbort=false;
TimerProc()
{
Step1();
if (shouldAbort)
{
UndoStep1();
return;
}
Step2();
if (shouldAbort)
{
UndoStep2();
UndoStep1(); // or vice versa, depending on your operations
return;
}
// ...
}
в OnStop ()
timer.Stop(); // don't worry here - your TimerProc() WILL finish
shouldAbort=true;