2

有没有办法在不同的线程中在鞋子中运行繁重的操作,以便 GUI 在操作完成之前不会冻结?(smth。类似于下载但更通用,如 Swing 中的 SwingWorker.class)。

我尝试了以下方法:

Thread.start { <heavy operation block is here> }

但这没有帮助。看起来鞋子主线程仍然受到影响。

提前非常感谢!

4

1 回答 1

1

没有看到你的代码,我不能给你任何具体的指导。但是,例如,这段代码对我来说就很好。请注意,如果在对话框启动时完成了繁琐的计算,您将在关闭对话框后的片刻后才能看到结果;对话框启动时,鞋子不会改变窗口 AI。试一试,看看它的表现如何,我们将从那里开始。

Shoes.app do

  @window_slot = stack do
    button('Tell me about ponies') do
      @window_slot.append { para 'OMG PONIES!' }
    end
    button('I like dialogs') { alert 'I like dialogs, too!' }
    button('Does this button make things slow?') do
      Thread.new do
        @window_slot.append { para 'Why did you click that?  Are you crazy?!' }

        #Let's do a bunch of calculations!
        arr = []
        sum = 0
        0.upto(10000) do |i|
          0.upto(1000) do |j|
            sum += j
          end
          arr << sum
        end

        @window_slot.append { para arr.join(' ') }
      end
    end
  end
end
于 2009-06-06T01:55:39.943 回答