ThreadStart:
ThreadStart-delegaatti määritellään void ThreadStart(), mikä tarkoittaa, että suoritettavalla metodilla ei voi olla parametreja. ThreadStart threadStart=new ThreadStart(Laske); Thread thread=new Thread(threadStart); lanka. Start(); public void Calculate() { kaksoishalkaisija=0,5; Console.Write("Ympyrän pinta-ala, jonka halkaisija on {0}, on {1}"Halkaisija,Halkaisija*Math.PI); } Tässä käytämme delegaattia, joka määrittelee ThreadStart-tyypin, joka määrittelee menetelmän, jonka säikeen täytyy suorittaa: Calculate, jossa lasketaan ympyrän ympärysmitta, jonka halkaisija on 0,5, ja tulokset. Tämä on yksinkertaisin esimerkki monisäikeisyydestä, joka monissa tapauksissa riittää
ParameterThreadStart: ParameterThreadStart määritellään tyhjäksi ParameterizedThreadStart (objektitila), ja tämän delegaatin avulla määritellyn säikeen käynnistysfunktio voi hyväksyä syöteparametrin, esimerkiksi:
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate) Thread thread=new Thread() ; lanka. Start(0,9); public void Laske (objekti arg)
{ kaksoishalkaisija=kaksois(arg); Console.Write("Ympyrän pinta-ala, jonka halkaisija on {0}, on {1}"Halkaisija,Halkaisija*Math.PI);
}
Calcole-menetelmällä on parametri tyyppiobjekti, vaikka parametri on vain yksi, ja sekin on objektityyppi, ja se täytyy silti muuntaa sitä käytettäessä, mutta onneksi parametreja voi olla, ja yhdistämällä useita parametreja yhdeksi luokaksi ja siirtämällä tämän luokan instanssi parametrina, voidaan saavuttaa useiden parametrien siirto. Kuten mitä:
class AddParams
{ julkinen int a, b;
public AddParams(int numb1, int numb2) { a = numb1; b = numb2; }
} #endregion
luokkaohjelma
{ staattinen void Pää(merkkijono[] args) { Console.WriteLine("***** Lisääminen säikeobjektien kanssa *****"); Console.WriteLine("Main() säikeen tunnus: {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = uudet AddParams(10, 10); Thread t = uusi Thread (uusi ParameterizedThreadStart(Add)); t.Start(ap); Console.ReadLine(); }
#region Lisää-menetelmä staattinen void Add(objektidata) { if (data on AddParams) { Console.WriteLine("Main() säikeen tunnus: {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = (AddParams)data; Console.WriteLine("{0} + {1} on {2}", ap.a, ap.b, ap.a + ap.b); } } #endregion
}
} |