I get no password or even write access :)
So, i attach a text file with the info to add to this article.

Bye
Luciano



From: Miguel de Icaza <[EMAIL PROTECTED]>
To: Luciano _ <[EMAIL PROTECTED]>
CC: [EMAIL PROTECTED], mono-docs-list@lists.ximian.com
Subject: Re: [Mono-docs-list] Adding a link to StudentProjectsinContributingand ThreadsBeginnersGuide
Date: Tue, 13 Mar 2007 12:45:30 -0400
MIME-Version: 1.0
Received: from erandi.dom ([130.57.22.201]) by bay0-mc5-f11.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.2668); Tue, 13 Mar 2007 09:46:55 -0700 Received: by erandi.dom (Postfix, from userid 500)id A086ACDB11; Tue, 13 Mar 2007 12:45:30 -0400 (EDT) X-Message-Info: LsUYwwHHNt3660MmjhEvYg2f34OAemlK+ZzoV09lDsZmbz8QigGIQtU5Yvr3lK0P
References: <[EMAIL PROTECTED]>
Organization: Novell, Inc. X-Mailer: Evolution 2.6.0 Return-Path: [EMAIL PROTECTED] X-OriginalArrivalTime: 13 Mar 2007 16:46:55.0972 (UTC) FILETIME=[35BDFA40:01C7658F]

Hey,

> It is an excelent article. I was looking for this info in the past, and
> someone help me with this at #Irc. Could i improved a little bit? Like
> adding info about passing info to thread method? How do i do this? I haven't
> got write access.

Send me your full name and I can set up an account for you


_________________________________________________________________
Visita MSN Latino Noticias: Todo lo que pasa en el mundo y en tu paín, ¡en tu idioma! http://latino.msn.com/noticias/
Passing parameters to threads
The ThreadStart delegate doesn't take any parameters, so, the parameters must be stored in somewhere else. A good way to do this, is to create a new object which contains the async method, and store the parameters in some of
it properties.
An example of this is:

using System;
using System.Threading;

namespace ThreadGuideSamples
{
        class ThreadCaller
        {
                        static void Main()
                        {
                                ThreadCaller myCaller = new ThreadCaller();
                        }

                        public ThreadCaller()
                        {
SecondThreadObject myThreadObject = new SecondThreadObject("Test Param"); // Constructor get the parameter myThreadObject.Parameter2 = 10; // Another value, not assigned at constructor Thread myThread = new Thread(new ThreadStart(myThreadObject.MyAsyncMethod));
                                myThread.Start();
                        }
        }

        class SecondThreadObject
        {
                        protected string Param1;
                        protected int Param2;

                        public SecondThreadObject(string parameter1)
                        {
                                        this.Param1 = parameter1;
                        }

                        public int Parameter2
                        {
                                set
                                {
                                        this.Param2 = value;
                                }
                        }

                        public void MyAsyncMethod()
                        {
Console.WriteLine("The value passed in the Constructor is '{0}'", this.Param1); Console.WriteLine("The value passed in the Property is '{0}'", this.Param2);
                                for(int x = 0; x < 50; x++)
                                        Console.WriteLine(x);
                                Console.ReadKey();
                        }
        }
}

Accessing to main thread with callback
In some applications you need to access to the caller thread (the main thread) [0]. In this case you can use
a callback delegate to access to it, like this:

using System;
using System.Threading;

namespace ThreadGuideSamples
{
        public delegate void MyCallBack(int Response);

        class ThreadCaller
        {
                        static void Main()
                        {
                                ThreadCaller myCaller = new ThreadCaller();
                        }

                        public ThreadCaller()
                        {
SecondThreadObject myThreadObject = new SecondThreadObject(this.OnResponse); // Constructor get the callback parameter Thread myThread = new Thread(new ThreadStart(myThreadObject.MyAsyncMethod));
                                myThread.Start();
                        }

                        protected void OnResponse(int response)
                        {
                                Console.WriteLine("Value returned to main thread 
{0}", response);
                                /*
                                        If you on Gtk# you can use like:
                                        Gtk.Application.Invoke ( delegate {
                                                        // My Changes to the gui
                                                });

                                 */

                        }
        }

        class SecondThreadObject
        {
                        protected MyCallBack OnResponse = null;
                        public SecondThreadObject(MyCallBack callback)
                        {
                                        this.OnResponse = callback;
                        }

                        public void MyAsyncMethod()
                        {
                                for(int x = 0; x < 50; x++)
                                        if(this.OnResponse != null)
                                                this.OnResponse(x); // Go To 
Thrad Caller
                                Console.ReadKey();
                        }
        }
}





[0] Some case like Gtk# need to be accessed across his own thread, so you need to take care of it:
        http://www.mono-project.com/Responsive_Applications
_______________________________________________
Mono-docs-list maillist  -  Mono-docs-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/mono-docs-list

Reply via email to