Secondo il loro Best Practices:
Gtk # non è un toolkit thread-safe, il che significa che solo un thread alla volta può richiamare in modo sicuro metodi su Gtk #. Questo thread è in genere il thread che esegue il ciclo principale (ovvero quando il controllo è stato trasferito esplicitamente a Gtk).
Quando gli sviluppatori di applicazioni devono avere thread che aggiornano alcuni elementi dell'interfaccia utente grafica devono acquisire un blocco che permetta loro di generare invocazioni di toolkit Gtk # o possono eseguire il loro codice sullo stesso thread di un thread che esegue il ciclo principale.
Per richiamare un metodo sul thread del ciclo principale GTK + ed evitare problemi di threading con GTK, è possibile utilizzare il metodo Gtk.Application.Invoke() (se si utilizza Gtk # 1.0 è possibile utilizzare Gtk.ThreadNotify).
Il seguente esempio è fornito; dovresti usare Invoke
per eseguire qualsiasi codice Gtk dal ciclo principale:
public void ThreadedMethod()
{
Gtk.Application.Invoke(delegate {
do_stuff_in_main_thread();
});
}
fonte
2010-03-30 19:59:26
I delegati non funzionano !? Utilizzi il metodo Control.BeginInvoke() per richiamare i delegati? – Cipi
Non l'ho fatto, puoi approfondire? – nubela
Tieni presente che sta utilizzando GTK, non Windows Form, quindi l'API è diversa (vedi sotto). –