według ich Best Practices:
Gtk # nie jest bezpieczny wątku narzędzi, co oznacza, że tylko jeden wątek na raz można bezpiecznie wywołać metody na Gtk #. Wątek ten jest zwykle wątkiem wykonującym pętlę główną (czyli wtedy, gdy kontrola została jawnie przekazana do Gtk).
Gdy programiści aplikacji muszą aktualizować wątki w jakimś elemencie graficznego interfejsu użytkownika, muszą albo uzyskać blokadę, która pozwala im wywołać wywołania narzędzia Gtk # toolkit, albo mogą wykonać ich kod w tym samym wątku, co jeden wątek która wykonuje główną pętlę.
Aby wywołać metodę w głównym wątku GTK + i uniknąć problemów z wątkiem w GTK, możesz użyć metody Gtk.Application.Invoke() (jeśli celujesz w Gtk # 1.0, możesz użyć Gtk.ThreadNotify).
Podany jest następujący przykład; powinieneś użyć Invoke
, aby wykonać dowolny kod Gtk z głównej pętli:
public void ThreadedMethod()
{
Gtk.Application.Invoke(delegate {
do_stuff_in_main_thread();
});
}
Delegaci nie działają !? Czy używasz metody Control.BeginInvoke() do wywoływania delegatów? – Cipi
Nie zrobiłem, możesz to rozwinąć? – nubela
Należy pamiętać, że używa on GTK, a nie Windows Forms, więc interfejs API jest inny (patrz poniżej). –