Últimament estic aficionat a fer aplicacions amb Threads, a menys que tingui molta pressa evito fer servir el Aplication.DoEvents() i faig un nou Thread que fa la funció.
Alehores he estat buscant com passar paràmetres a la funció que ha d'executar el Thread. I això es fa amb un "delegate", ja que el Thread espera un delegate d'aquests.
I un "delegate" que és? Segons la definició és un tipus de dada. Aquest tipus de dada és un punter a una funció, però més segur que un punter ja que verifica els tipus dels paràmetres. Un exemple:
public delegate void Del(string message);
public static void DelegateMethod(string message)
{
System.Console.WriteLine(message);
}
Del handler = DelegateMethod;
handler("Hello World");
Aleshores, per invocar a un Thread hi ha 2 formes de fer-ho:
static void ProcessPerson(Person p)
{
Console.WriteLine("Id :{0},Name :{1}", p.Id, p.Name);
}
static void Main()
{
Person p = new Person();
p.Id = "cs0001";
p.Name = "William";
Thread th = new Thread(delegate() { ProcessPerson(p); });
th.Start();
}
static void Main()
{
Person p = new Person();
p.Id = "cs0001";
p.Name = "William";
Thread th = new Thread(() => ProcessPerson(p));
th.Start();
}
A mi m'agrada més l'opció 2 de C# sense "lambda expressión" ja que queda més clar que està fent. |