I want to monitor a long calculation that is triggered by the release of a Slider. While one can indicate running calculations when the main evaluation loop is controlled by a queued Button, the same cannot be done with more direct Dynamic approaches. A bit of trial and error actually confirms that only Button and not any of the other controls (Slider, Locator, even EventHandler) can be evaluated non-preemptively.
This works as expected, displaying a ProgressIndicator while the long calculation is performing:
long[] := Module[{a = .3}, Do[a = 3.5 a (1 - a), {i, n}]]; {active, x} = {False, 1}; {Slider[Dynamic@x, {0, 1}], Button["Update", (active = True; long[]; active = False;), Method -> "Queued"]} Dynamic@{If[active, ProgressIndicator[i, {0, 10^6}], "..."], active} 
The same cannot be done using a Slider. The update command was put in the second argument of Dynamic, more precisely in the slot which is evaluated when the controller is released. As you can see, it still evaluates long (the string is printed) but it does not switch active and consequently it does not display the ProgressIndicator.
long[] := Module[{a = .3}, Do[a = 3.5 a (1 - a), {i, 10^6}]]; {active, x} = {False, 1}; Slider[Dynamic[x, {(x = #) &, (active = True; Print["evaluating..."]; long[]; active = False) &}], {0, 1}] Dynamic@{If[active, ProgressIndicator[i, {0, 10^6}], "..."], active} 
No amount of TrackedSymbols :> {...}, ContinuousEvaluation -> False or SynchronousUpdating -> False helped.
Is there any way to force $f_{end}$ in Dynamic[$x$, {$f$, $f_{end}$}] to be evaluated in a queued fashion, not preempting (its own) previous commands?
As a sidenote: It would be interesting to look into the implementation of Button as it definitely stands on something different than EventHandler. Does anyone has some insight on this matter?
Methodoption was not implemented for dynamic controllers other thanButton. $\endgroup$