Как я получаю доступ к GUI (GTK) от много потоков?

Мне породили рабочий поток от GUI (для производительности GUI), как я получаю доступ к GUI, такому как порождение новых окон/виджетов от самого потока?

Я пытался использовать делегатов, но это, кажется, не работает. Какие-либо идеи? Возможно примеры?Спасибо.

16
задан Jon Seigel 8 June 2010 в 04:39
поделиться

1 ответ

Согласно их Best Practices :

Gtk # не является потокобезопасным набором инструментов, что означает, что только один поток на время может безопасно вызывать методы в Gtk #. Этот поток обычно является потоком, выполняющим основной цикл (когда управление было явно передано Gtk).

Когда разработчикам приложений требуется, чтобы потоки обновляли какой-либо элемент графического пользовательского интерфейса, они должны либо установить блокировку, которая позволяет им выполнять вызовы инструментария Gtk #, либо они могут заставить свой код выполняться в том же потоке, что и один поток, который выполняет основной цикл.

Чтобы вызвать метод в потоке основного цикла GTK + и избежать проблем с потоками в GTK, вы можете использовать метод Gtk.Application.Invoke () (если вы нацеливаетесь на Gtk # 1.0, вы можете использовать Gtk.ThreadNotify).

Предлагается следующий пример; вы должны использовать Invoke для выполнения любого кода Gtk из основного цикла:

public void ThreadedMethod()
{
    Gtk.Application.Invoke(delegate {
        do_stuff_in_main_thread();
    });
}
32
ответ дан 30 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: