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