Обувь и тяжелые операции в отдельном потоке

Есть ли способ запустить тяжелую операцию в ботинках в другом потоке, чтобы графический интерфейс не зависал до завершения операции? (что-то похожее на загрузку, но более общее, как SwingWorker.class в Swing).

Я пробовал следующее:

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

но это не помогло Похоже, что обувь основная нить все еще влияет.

Заранее большое спасибо!

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
Другие вопросы по тегам