如何从多线程访问GUI(GTK)?

时间:2010-03-30 19:49:50

标签: c# mono gtk gtk#

我有一个从GUI生成的工作线程(用于GUI性能),如何访问GUI,例如从线程本身生成新的窗口/窗口小部件?

我尝试使用委托,但它似乎没有用。有任何想法吗?可能的例子?谢谢。

1 个答案:

答案 0 :(得分:32)

根据他们的Best Practices

  

Gtk#不是一个线程安全的工具包,这意味着一次只有一个线程可以安全地调用Gtk#上的方法。该线程通常是执行主循环的线程(当控件已明确转移到Gtk时)。

     

当应用程序开发人员需要让线程更新图形用户界面的某些元素时,他们必须获取一个锁,允许他们发出Gtk#toolkit调用,或者他们可以使他们的代码在与一个线程相同的线程上执行执行主循环。

     

要在GTK +主循环线程上调用方法并避免GTK的任何线程问题,您可以使用Gtk.Application.Invoke()方法(如果您的目标是Gtk#1.0,​​则可以使用Gtk.ThreadNotify)。 / p>

提供以下示例;你应该使用Invoke从主循环中执行任何Gtk代码:

public void ThreadedMethod()
{
    Gtk.Application.Invoke(delegate {
        do_stuff_in_main_thread();
    });
}