ThreadStart:
ThreadStarti delegaat on defineeritud kui void ThreadStart(), mis tähendab, et käivitatud meetodil ei saa olla parameetreid. ThreadStart threadStart=new ThreadStart(Calculate); Thread = uus Thread (threadStart); niit. Start(); public void Calculate() { kahekordne diameeter=0,5; Console.Write("Ringi pindala läbimõõduga {0} on {1}"Diameeter,Diameet*Math.PI); } Siin kasutame delegaati, mis määratleb ThreadStart tüübi, mis määrab meetodi, mida lõim peab täitma: Calculate, kus arvutatakse 0,5 läbimõõduga ringi ümbermõõt ja väljund. See on lihtsaim näide mitmelõimelisest kasutamisest, mis paljudel juhtudel on piisav
ParameterThreadStart: ParameterThreadStart on defineeritud kui void ParameterizedThreadStart (objekti seisund) ning selle delegaadi abil defineeritud lõime käivitusfunktsioon võib vastu võtta sisendparameetrit, näiteks:
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate) Thread thread=new Thread() ; niit. Start(0,9); public void Calculate(object arg)
{ kahekordne diameeter = kahekordne (arg); Console.Write("Ringi pindala läbimõõduga {0} on {1}"Diameeter,Diameet*Math.PI);
}
Calculate meetodil on parameeter tüüpi objekt, kuigi parameeter on ainult üks, ja see on samuti objektitüüp ning seda tuleb ikkagi teisendada, kuid õnneks on olemas parameetrid, ning kombineerides mitu parameetrit klassiks ja seejärel selle klassi eksemplari parameetrina edasi andes, saab saavutada mitme parameetri ülekande. Nagu mida:
class AddParams
{ avalik intellekt A, B;
public AddParams(int numb1, int numb2) { a = numb1; b = numb2; }
} #endregion
Klassiprogramm
{ staatiline tühjus Main(string[] args) { Console.WriteLine("***** Lisamine lõimeobjektidega *****"); Console.WriteLine("Lõime ID Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = uued AddParams(10, 10); Thread t = uus Thread (uus ParameterizedThreadStart(Add)); t.Start(ap); Console.ReadLine(); }
#region Lisa meetod staatiline tühjus Lisa(objektiandmed) { if (andmed on AddParams) { Console.WriteLine("Lõime ID Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = (AddParams)andmed; Console.WriteLine("{0} + {1} on {2}", ap.a, ap.b, ap.a + ap.b); } } #endregion
}
} |