Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: GUI > Ошибка потока в WxRuby


Автор: Teimos 21.9.2012, 08:22
Задача: загрузить из дропбокс файла список сайтов клиентов и вывести в гуишке.
Листинг:

Код

# coding: utf-8
 
require 'rubygems'
require 'wx' # гем wxruby
require 'mechanize'
require File.join(File.dirname(__FILE__), 'guishka')
 
class Gena < XFrame
  def initialize
    super #инициализация родительского конструктора
    
    #вешаем события на кнопки
    evt_button(b_reload) { reload_sites }
    
    timer = Wx::Timer.new(self, Wx::ID_ANY)
    evt_timer(timer.id) {Thread.pass}
    timer.start(10)
    
  end
  def curr(str)
    @curr_action.set_label(str.to_s)
  end
  def curr_clear
    @curr_action.set_label("OK")
    puts 'OK'
  end
  def reload_sites 
    curr "Загружаю дропбокс..." #тут работает нормально
    Thread.new do
      agent = Mechanize.new
      agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
      data = agent.get $config['dropbox'].to_s
      tmp = Array.new
      data.body.each_line do |line|
        line.chomp!
        tmp << line.split(";")[1]
        puts line.split(";")[1]
      end
      @list_site.insert_items(tmp, 0) #На этом шаге приложение зависает, и белеет (виндовс 7)
      curr_clear #Если убрать предыдущий шаг, все равно вылетит вот в этом месте, так как в этом методе идет обращение к методам гуя
    end
  end
end
 
Wx::App.run do
  Gena.new.show
end


В общем проблема в том, что когда я пытаюсь из потока обратиться к методам объектов из класса, в котором был вызван поток, все падает.

В чем причина может быть? Я даже не знаю как отловить баг, Begin... rescue - не ловит ничего.

Спасибо заранее.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)