Помогло использование вместо
text.value += i.to_s
Вот этого
text.append_text i.to_s
Но при этом пока работает программа - интерфейс висит при даже клике по нему.
А вот использование потоков как советовал
@AMar4enko решило все проблемы!
Решение с потоками заработало после добавления в описание класса таймера:
timer = Wx::Timer.new(self, Wx::ID_ANY)
evt_timer(timer.id) {Thread.pass}
timer.start(100)