[Gtk-sharp-list] Newbie's TreeView updates *very* slowly

Chris Howie cdhowie at gmail.com
Tue Dec 30 19:45:35 EST 2008

On Tue, Dec 30, 2008 at 7:37 PM, fourthirtysix <fourthirtysix at yahoo.com> wrote:
> I've read over many of the suggestions and links in the replies, thank you to
> everyone, and have added in Threading to keep the GUI responsive. There is
> one weird catch however--
> I load about 500,000 records into a huge ArrayList and then run multiple
> searches over that. Each time I iterate over the big list, it generates a
> "hit" and I want to update the ListStore. I do so with an AppendValues,
> however the GUI does not refresh completely.
> I can see it "sort of" refresh for some of my hits.. It will put in a few
> values for each row, or add in a zero as placeholders, but it does not
> update the entire screen properly until the hits are mostly in and I
> actually move the mouse cursor into the treeview section of the GUI. It may
> be that I have to hover over an actual Row, but I need to test some more.

Usually this is a symptom of invoking AppendValues on the model from a
different thread than the GTK+ event loop thread.  Make sure that you
are using Application.Invoke each time you touch the model from a
different thread, like this:

Application.Invoke(delegate {
    foreach (object i in something) {

You can invert the nesting there (iterate and call Invoke instead of
iterating inside the delegate) if the results come in slowly enough
that doing cross-thread synchronization doesn't slow it down
significantly.  Otherwise doing one cross-thread call and throwing a
whole batch in at once is the way to go.

(Note that Application.Invoke does *not* wait for the delegate to be
executed.  It returns immediately after pushing the delegate on the
event stack, so careful your code doesn't step on itself.)

Chris Howie

More information about the Gtk-sharp-list mailing list