Selon leur Best Practices:
Gtk # est pas une boîte à outils de thread-safe, ce qui signifie qu'un seul thread à la fois peut en toute sécurité appeler des méthodes sur Gtk #. Ce thread est généralement le thread exécutant la boucle principale (qui est quand le contrôle a été explicitement transféré à Gtk). Lorsque les développeurs d'applications doivent mettre à jour des éléments de l'interface utilisateur graphique, ils doivent soit acquérir un verrou leur permettant d'émettre des invocations Gtk # toolkit, soit exécuter leur code sur le même thread que le thread. qui exécute la boucle principale.
Pour invoquer une méthode sur le thread de boucle principale GTK + et éviter tout problème de threading avec GTK, vous pouvez utiliser la méthode Gtk.Application.Invoke() (si vous ciblez Gtk 1.0, vous pouvez utiliser Gtk.ThreadNotify).
L'exemple suivant est fourni. vous devez utiliser Invoke
pour exécuter n'importe quel code Gtk à partir de la boucle principale:
public void ThreadedMethod()
{
Gtk.Application.Invoke(delegate {
do_stuff_in_main_thread();
});
}
Les délégués ne fonctionnent pas !? Utilisez-vous la méthode Control.BeginInvoke() pour appeler des délégués? – Cipi
Je ne l'ai pas fait, pouvez-vous élaborer là-dessus? – nubela
S'il vous plaît gardez à l'esprit qu'il utilise GTK, pas Windows Forms, donc l'API est différente (voir ci-dessous). –