操作が完了するまで GUI がフリーズしないように、重い操作を別のスレッドで実行する方法はありますか? (ダウンロードに似ていますが、Swing の SwingWorker.class のようにより一般的です)。
私は次のことを試しました:
Thread.start { <heavy operation block is here> }
しかし、それは役に立ちませんでした。Shoes のメイン スレッドはまだ影響を受けているようです。
よろしくお願いします!
操作が完了するまで GUI がフリーズしないように、重い操作を別のスレッドで実行する方法はありますか? (ダウンロードに似ていますが、Swing の SwingWorker.class のようにより一般的です)。
私は次のことを試しました:
Thread.start { <heavy operation block is here> }
しかし、それは役に立ちませんでした。Shoes のメイン スレッドはまだ影響を受けているようです。
よろしくお願いします!
あなたのコードを見ずに、私はあなたに特定のガイダンスを与えることができません。しかし、たとえば、このコードは私にとっては問題なく機能します。ダイアログが表示されている間に面倒な計算が完了すると、ダイアログを閉じてからしばらく経つまで結果が表示されないことに注意してください。ダイアログが表示されている間、靴はウィンドウ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