我有一個gtktree列和值。我還有一個帶有一個gtkmenuitem的菜單:'刷新'。爲什麼我的GtkTreeView更新只會在gtkitem事件結束後觸發?
刷新事件做了兩兩件事:
- 重新填充我的gtktree
- 預製件的查詢。
該查詢不是即時的,大約需要5秒。爲什麼我只能在查詢5秒後才能看到樹的更新?我想立即更新gtk樹,我不明白更新的延遲。
我有一個gtktree列和值。我還有一個帶有一個gtkmenuitem的菜單:'刷新'。爲什麼我的GtkTreeView更新只會在gtkitem事件結束後觸發?
刷新事件做了兩兩件事:
該查詢不是即時的,大約需要5秒。爲什麼我只能在查詢5秒後才能看到樹的更新?我想立即更新gtk樹,我不明白更新的延遲。
如果你正在做一個長時間的計算,那麼程序就忙於此,並沒有時間來更新GUI。爲了解決這個問題,請確保您在查詢的「主循環」執行以下代碼(如果有這樣的事):
while(gtk_events_pending())
gtk_main_iteration();
如果查詢沒有一個循環,例如如果它完全在外部庫中運行,則必須按照Will的建議來做,並在單獨的線程中運行它。
如果您的查詢針對sqlite運行,請將上面的代碼放入sqlite3_progress_handler()回調函數中。 – aquaherd
我已將您的兩個帳戶合併在一起。 [請閱讀關於基於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
此外,我不編碼GTK,但我敢打賭,你阻止了UI線程。您需要在不同的線程上執行查詢,以便UI線程可以更新樹。 – Will