Here is an example of using `ProgressIndicator`. I added `Pause[]` to simulate some blocking operation, and added Abort button. This is the pattern that I use when using this feature. It is simple and works for me. The idea is to pass the tracking symbol by reference. Manipulate[(*example using progress monitor in Manipulate*) Module[{result}, abort = False; track=0; result = solve[n, Unevaluated[track], Unevaluated[abort]]; track = 0; If[abort, "Aborted", "success!"]], Grid[{ {Control[{{n, 10, "size of problem?"}, 1, 1000, 1, Appearance -> "Labeled"}]}, {Button["Abort", abort = True, ImageSize -> {40, 30}]}, {Dynamic[ProgressIndicator[track, {0, 1}]]} }], {{track, 0}, None}, {{abort, False}, None}, TrackedSymbols :> {n}, SynchronousUpdating -> False, ContinuousAction -> False, Initialization :> ( solve[n_, track_, abort_] := Module[{k = 0, result = 1,i}, Do[PrimeQ[i]; Pause[0.1]; k = k + 1; track = k/n; If[abort, result = -1; Break[]] , {i, n} ]; result ] ) ] ![enter image description here][1] If you like to see position of progress, it is probably easier to use one of the new version 9 controls such as `BulletGauge` since those will automatically label the display. Here is example using `[BulletGauge][2]` and this works without `Refresh` even, so I removed the passing of the `track` symbol as in the first example above. I used reference 1 for this example just for now. Help has more information on how to set this control in more specific ways. Manipulate[ Module[{result}, abort = False; track = 0; result = solve[n]; track = 0; If[abort, "Aborted", "success!"]], Grid[{{Control[{{n, 10, "size of problem?"}, 1, 1000, 1, Appearance -> "Labeled"}]}, {Button["Abort", abort = True,ImageSize -> {40, 30}]}, {Dynamic[BulletGauge[track, 1, Range[0, 1]]]} (*more options in help*) } ], {{track, 0}, None}, {{abort, False}, None}, TrackedSymbols :> {n}, SynchronousUpdating -> False, ContinuousAction -> False, Initialization :> ( solve[n_] := Module[{k = 0, result = 1, i}, Do[PrimeQ[i]; Pause[0.1]; k = k + 1; track = k/n; If[abort, result = -1; Break[]], {i, n}]; result]) ] ![enter image description here][3] [1]: https://i.sstatic.net/bAR2f.gif [2]: http://reference.wolfram.com/mathematica/ref/BulletGauge.html [3]: https://i.sstatic.net/3Ynrd.gif