Как я могу показать индикатор в Pharo? - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть do: в Фаро, на обработку которого уходит много времени. Я хотел бы показать прогресс этого пользователю. Как это делается в Pharo?

1 Ответ

0 голосов
/ 19 ноября 2018

Вот два способа:

  1. Collection заимствует у UIManager и поддерживает displayingProgress: every: milliseconds вариант do::

    (1 to: 60)
       do: [ :e | (Delay forSeconds: 0.5) wait "simulate a delay" ]
       displayingProgress: [ :e | 'waiting ' , e asString ] every: 1000
    

    Вы можете поиграть с every: в этом примере, чтобы увидеть, что если вы установите его менее 1000 мс, он будет обновляться чаще (если задать 100, вы увидите каждое значение интервала).

    Кроме того, вы можете просто использовать displayingProgress: 'Waiting...', чтобы показывать только одну и ту же строку все время без блока.

  2. Использование класса 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
    
...