[Gtk-sharp-list] Pause the execution of crowded computation to allow the GUI to refresh

Adam Tauno Williams awilliam at whitemice.org
Fri Apr 23 14:34:31 EDT 2010

On Fri, 2010-04-23 at 10:17 -0800, fpiraneo wrote:
> Adam Tauno Williams-3 wrote:
> > I'd just start the computation in a thread and update the progress bar
> > via Application.Invoke.
> ...and without using threading?

If you are just using a Glib.Timeout it won't work for a single threaded
app unless you occasionally release to the event loop.

You'd have to change your processing to periodically pause - that really
is all up to whatever processing you are doing.  If it is an iteration
you should make sure you run the message queue every X number of loops.

Are you running your processing in an Idle handler?   

Or you could do something of the following pattern:

void LongComputation ()
     while (!done){
         ComputationChunk ();
         // Flush pending events to keep the GUI reponsive
         while (Gtk.Application.EventsPending ())
              Gtk.Application.RunIteration ();


This makes sure all the pending events are processed between chunks of your long computation.
Adam Tauno Williams <awilliam at whitemice.org> LPIC-1, Novell CLA
OpenGroupware, Cyrus IMAPd, Postfix, OpenLDAP, Samba

More information about the Gtk-sharp-list mailing list