2009-06-06 20 views
2

Existe-t-il un moyen d'effectuer une opération lourde dans les chaussures dans un filetage différent de sorte que l'interface graphique ne gèle pas jusqu'à ce que l'opération soit terminée? (similaire au téléchargement mais plus générique, comme SwingWorker.class dans Swing).Chaussures et opération lourde dans un filetage séparé

J'ai essayé ce qui suit:

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

mais cela n'a pas aidé. On dirait que le fil principal de Shoes est toujours affecté.

Merci beaucoup d'avance!

Répondre

1

Sans voir votre code, je ne peux pas vous donner de conseils spécifiques. Mais ce code, par exemple, fonctionne très bien pour moi. Notez que si les calculs fastidieux se terminent alors que la boîte de dialogue est en haut, vous ne verrez les résultats que quelques instants après la fermeture de la boîte de dialogue; Les chaussures ne changeront pas la fenêtre AI tant que la boîte de dialogue est ouverte. Essayez-le et voyez comment il se comporte, et nous partirons de là.

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