Vala, GTK: Как мне выполнить операции пользовательского интерфейса из другого потока?

У меня есть сервер, прослушивающий сообщения через порт, работающий в другом потоке. Теперь, когда он получает сообщение, мне нужно, чтобы оно отображалось в текстовом поле.

  1. Есть такой метод, как runOnUiThread() (который находится в Android) или эквивалентный в Vala, GTK?

  2. Или каковы альтернативы?

2 ответа

Решение

Используйте GLib.Idle.add, чтобы запланировать что-то в потоке отправки событий:

Idle.add(() => {
  textbox.Entry = "foo";
  return Source.REMOVE;
});

В отличие от многих других операционных систем, очевидно, вы могли бы выполнять операции пользовательского интерфейса из потока, не являющегося пользовательским интерфейсом. Я мог бы успешно изменить текст Entry из потока сервера. Не уверен, если это рекомендуется, хотя.

Другие вопросы по тегам