У меня есть do: в Фаро, на обработку которого уходит много времени. Я хотел бы показать прогресс этого пользователю. Как это делается в Pharo?
do:
Вот два способа:
Collection заимствует у UIManager и поддерживает displayingProgress: every: milliseconds вариант do::
Collection
UIManager
displayingProgress:
every: milliseconds
(1 to: 60) do: [ :e | (Delay forSeconds: 0.5) wait "simulate a delay" ] displayingProgress: [ :e | 'waiting ' , e asString ] every: 1000
Вы можете поиграть с every: в этом примере, чтобы увидеть, что если вы установите его менее 1000 мс, он будет обновляться чаще (если задать 100, вы увидите каждое значение интервала).
every:
Кроме того, вы можете просто использовать displayingProgress: 'Waiting...', чтобы показывать только одну и ту же строку все время без блока.
displayingProgress: 'Waiting...'
Использование класса Job.Вот аналогичное решение, как указано выше:
Job
myColl := 1 to: 20. [ :job | myColl do: [ :e | job progress: e / myColl size; title: 'waiting ' , e asString. (Delay forSeconds: 0.5) wait ] ] asJob run