ThreadStart:
Delegatul ThreadStart este definit ca void ThreadStart(), ceea ce înseamnă că metoda executată nu poate avea parametri. ThreadStart threadStart=threadStart(Calculate); Thread thread=thread nou(threadStart); fir. Start(); Public void Calculate() { diametru dublu = 0,5; Console.Write("Aria cercului cu diametrul de {0} este {1}"Diameter,Diameter*Math.PI); } Aici folosim un delegat care definește un tip ThreadStart, care definește metoda pe care thread-ul trebuie să o execute: Calcule, în care se calculează circumferința unui cerc cu diametrul 0,5, și se rezumă. Aceasta constituie cel mai simplu exemplu de multithreading, care în multe cazuri este suficient
ParameterThreadStart: ParameterThreadStart este definit ca void ParameterizedThreadStart(object star), iar funcția de pornire a firului definit folosind acest delegat poate accepta un parametru de intrare, de exemplu:
ParameterizedThreadStart threadStart=nou parametrizedThreadStart(Calculate) Thread thread=thread nou() ; fir. Start (0.9); public void Calculate(object arg)
{ double Diameter=double(arg); Console.Write("Aria cercului cu diametrul de {0} este {1}"Diameter,Diameter*Math.PI);
}
Metoda Calculate are un parametru de tip obiect, deși există un singur parametru, și este tot un tip obiect, și tot trebuie convertit când îl folosești, dar din fericire pot exista parametri, iar combinând mai mulți parametri într-o clasă și apoi transmitând instanța acestei clase ca parametru, poți obține transferul mai multor parametri. De exemplu:
clasa AddParams
{ public int a, b;
public AddParams(int numb1, int numb2) { a = numb1; b = numb2; }
} #endregion
Programul clasei
{ static void Main(string[] args) { Console.WriteLine("***** Adding with Thread objects *****"); Console.WriteLine("ID de fir în Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = noi AddParams(10, 10); Thread t = new Thread(new ParameterizedThreadStart(Add)); t.Start(ap); Console.ReadLine(); }
#region Metoda Adunării static void Adaugă (date de obiect) { if (datele sunt AddParams) { Console.WriteLine("ID de fir în Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = (AddParams)data; Console.WriteLine("{0} + {1} este {2}", ap.a, ap.b, ap.a + ap.b); } } #endregion
}
} |