Vala, GTK: Как мне выполнить операции пользовательского интерфейса из другого потока?
У меня есть сервер, прослушивающий сообщения через порт, работающий в другом потоке. Теперь, когда он получает сообщение, мне нужно, чтобы оно отображалось в текстовом поле.
Есть такой метод, как runOnUiThread() (который находится в Android) или эквивалентный в Vala, GTK?
Или каковы альтернативы?
2 ответа
Решение
Используйте GLib.Idle.add, чтобы запланировать что-то в потоке отправки событий:
Idle.add(() => {
textbox.Entry = "foo";
return Source.REMOVE;
});
В отличие от многих других операционных систем, очевидно, вы могли бы выполнять операции пользовательского интерфейса из потока, не являющегося пользовательским интерфейсом. Я мог бы успешно изменить текст Entry
из потока сервера. Не уверен, если это рекомендуется, хотя.