如何在Pharo中显示进度条?

Fuh*_*tor 2 pharo

我有一个do:Pharo,需要很长时间才能处理.我想向用户展示它的进展情况.Pharo是如何完成的?

Fuh*_*tor 7

这有两种方式:

  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
    
    Run Code Online (Sandbox Code Playgroud)

    您可以使用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
    
    Run Code Online (Sandbox Code Playgroud)