Мне породили рабочий поток от GUI (для производительности GUI), как я получаю доступ к GUI, такому как порождение новых окон/виджетов от самого потока?
Я пытался использовать делегатов, но это, кажется, не работает. Какие-либо идеи? Возможно примеры?Спасибо.
Согласно их 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();
});
}