如何在 Pharo 中显示进度条?

How can I show a progress bar in Pharo?

我在 Pharo 中有一个 do: 需要很长时间才能处理。我想向用户展示它的进度。 Pharo 是怎么做到的?

这里有两种方法:

  1. Collection 借鉴 UIManager 并支持 do: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 将显示间隔的每个值)。

    此外,您可以简单地使用 displayingProgress: 'Waiting...' 来始终只显示相同的字符串,而不会出现阻塞。

  2. 使用Jobclass。这是与上述类似的解决方案:

    myColl := 1 to: 20.
    [ :job | 
    myColl
       do: [ :e | 
          job
            progress: e / myColl size;
            title: 'waiting ' , e asString.
          (Delay forSeconds: 0.5) wait ] ] asJob run