[Gtk-sharp-list] Gtk.DrawingArea not thread-agnostic on Win32?
Adam Tauno Williams
awilliam at whitemice.org
Tue Sep 23 06:56:37 EDT 2008
On Tue, 2008-09-23 at 12:00 +0200, Sam Hocevar wrote:
> I have a threaded GTK# application that creates widgets in several
> threads (all with proper synchronisation, of course). It works perfectly
> on Linux, but it hangs on Win32 when using Gtk.DrawingArea objects.
Yep, it is well documented that what you describe won't work.
> Attached is a sample program which does the following:
> - thread #1 creates a Gtk.Window
> - thread #1 spawns thread #2
> - thread #2 creates a Gtk.DrawingArea object
> - thread #1 attaches the DrawingArea to the Window
> - thread #1 waits for user input
> - thread #2 destroys the Gtk.DrawingArea object
> - thread #1 joins thread #2
> - thread #1 exits
> Everything goes well on Linux. On Win32, the program hangs during the
> Gtk.DrawingArea destruction.
This is expected; Gtk on LINUX is much more tolerant that on Win32, but
even on LINUX it will crash eventually.
> It should be noted that using Gtk.Button instead of Gtk.DrawingArea
> makes everything work properly on both Linux and Windows.
> Any ideas on what may be wrong?
Management of the UI must all be done from the main thread. I use
Application.Invoke(delegate{ }) to modify the UI from [potentially]
other threads.
More information about the Gtk-sharp-list
mailing list