2011-09-19 48 views
1

我有一个gtktree列和值。我还有一个带有一个gtkmenuitem的菜单:'刷新'。为什么我的GtkTreeView更新只会在gtkitem事件结束后触发?

刷新事件做了两两件事:

  • 重新填充我的gtktree
  • 预制件的查询。

该查询不是即时的,大约需要5秒。为什么我只能在查询5秒后才能看到树的更新?我想立即更新gtk树,我不明白更新的延迟。

+0

我已将您的两个帐户合并在一起。 [请阅读关于基于Cookie的帐户的这个Faq条目。](http://meta.stackexchange.com/questions/44557/why-should-i-register-my-account/1228)另外,StackOverflow不是论坛;如果您有新问题,请提出一个新问题。如果你想在你的问题中包含更多信息,请[编辑](http://stackoverflow.com/posts/7476705/edit)。如果您想与其中一位已回答的人进行互动,您可以留下评论。另外,我想你应该阅读[faq#howtoask]和[faq#bounty]。 – Will

+0

此外,我不编码GTK,但我敢打赌,你阻止了UI线程。您需要在不同的线程上执行查询,以便UI线程可以更新树。 – Will

回答

2

如果你正在做一个长时间的计算,那么程序就忙于此,并没有时间来更新GUI。为了解决这个问题,请确保您在查询的“主循环”执行以下代码(如果有这样的事):

while(gtk_events_pending()) 
    gtk_main_iteration(); 

如果查询没有一个循环,例如如果它完全在外部库中运行,则必须按照Will的建议来做,并在单独的线程中运行它。

+0

如果您的查询针对sqlite运行,请将上面的代码放入sqlite3_progress_handler()回调函数中。 – aquaherd

相关问题