[Mono-dev] mono X11 rendering

Sunny sloncho at gmail.com
Fri Oct 14 11:09:54 EDT 2005


On 10/14/05, Harry <harry_tanama at yahoo.com> wrote:
> Hi guys,
>
> I am not sure where to post this questions. Hopefuly
> you guys are able to answer my questions:
>
> I am developing a simple applications using Thread
> class to change the color of the square (Lab
> assignment)
>
> everything working correctly, accept I have to drag
> the windows in linux to let the Thread working to
> change the color of a square.
>
>
> here is my code:
> using System;
> using System.Windows.Forms;
> using System.Threading;
> using System.Drawing;
>
>         public void Run()
>         {
>                 Random r = new Random();
>                 while(true)
>                 {
>                         c = Color.FromArgb(r.Next(256), r.Next(256),
> r.Next(256));
>                         Thread.Sleep(200);
>                 }
>         }
>
> }
>

I do not know in mono, but in .Net this is not the right way to do it.
All properties and methods of Form class _ARE NOT_ thread safe. You
can not touch them from a different thread (i.e. you can :) but it
will have unexpected behaviour).

The only methods which can be used from a different thread are
BeginInvoke, EndInvoke, Invoke and the property IsInvokeRequired.

You have to create a method which changes the the Color property, and
call this method through a delegate with Invoke. This will dispatch
the calling in the main GUI thread.

Take a look here:
<http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnforms/html/winforms06112002.asp>

Cheers

--
Svetoslav Milenov (Sunny)



More information about the Mono-devel-list mailing list