LINUX.ORG.RU

Gtk# При изменении свойства Label.Text перестает обновляться окно.


0

0

lblTime.Text = String.Format("{0} sec.",shutdown_offset);

Вызываю в таймере каждую секунду. Но где-то через 5-15 секунд перестает обновляться интерфейс всего окна. Таймер идет как и шел. Если свернуть и развернуть окно то все контролы перестают отображаться, но на сообщения отвечают нормально. Самое интересное что если у Lable не трогать свойство Text то все работает нормально. Пробовал вызывать окну this.QueueDrawArea, не помогает.


Не знаю Gtk#, но все-таки спрошу. Таймер — это какой таймер? Исполняется ли он в другой нитке, нежели нитка, в которой главный цикл событий gtk?

dmitry_vk ★★★
()
Ответ на: комментарий от dmitry_vk

Спасибо за наводку, проблема решена.
Действительно таймер выполнялся не в потоке Gtk.

Использовал специальный таймер. Он автоматически выполняется в главном потоке Gtk.
GLib.Timeout.Add(1000,new GLib.TimeoutHandler(OnTimerTick));

protected virtual bool OnTimerTick()
{
...
lblTime.Text = String.Format("{0} sec.",shutdown_offset);
...

}

Также для этих целей можно использовать
Gtk.Application.Invoke.

Почитать можно тут:
http://www.mono-project.com/Responsive_Applications

Remit
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.