Jus*_*ier 32
根据他们的最佳实践:
Gtk#不是一个线程安全的工具包,这意味着一次只有一个线程可以安全地调用Gtk#上的方法.该线程通常是执行主循环的线程(当控件已明确转移到Gtk时).
当应用程序开发人员需要让线程更新图形用户界面的某些元素时,他们必须获取一个锁,允许他们发出Gtk#toolkit调用,或者他们可以使代码在与执行main的一个线程相同的线程上执行环.
要在GTK +主循环线程上调用方法并避免GTK的任何线程问题,您可以使用Gtk.Application.Invoke()方法(如果您的目标是Gtk#1.0,则可以使用Gtk.ThreadNotify).
提供以下示例; 你应该使用Invoke从主循环中执行任何Gtk代码:
public void ThreadedMethod()
{
Gtk.Application.Invoke(delegate {
do_stuff_in_main_thread();
});
}
Run Code Online (Sandbox Code Playgroud)