ThreadStart:
Delegát ThreadStart je definovaný ako void ThreadStart(), čo znamená, že vykonaná metóda nemôže mať parametre. ThreadStart threadStart=new ThreadStart(Calculate); Vlákno = nové Vlákno(threadStart); Vlákno. Start(); public void Calculate() { dvojitý priemer=0,5; Console.write("Plocha kruhu s priemerom {0} je {1}"Diameter, Diameter*Math.PI); } Tu používame delegáta, ktorý definuje typ ThreadStart, ktorý definuje metódu, ktorú vlákno potrebuje na vykonanie: Calculate, pri ktorom sa vypočíta obvod kruhu s priemerom 0,5, a výstup. Toto predstavuje najjednoduchší príklad multithreadingu, ktorý je v mnohých prípadoch postačujúci
ParameterThreadStart: ParameterThreadStart je definovaný ako void ParameterizedThreadStart(stav objektu) a štartovacia funkcia vlákna definovaného pomocou tohto delegáta môže prijať vstupný parameter, napríklad:
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate) Vlákno = nové Vlákno() ; Vlákno. Štart (0,9); public void Calculate(object arg)
{ dvojitý priemer=dvojnásobok(arg); Console.write("Plocha kruhu s priemerom {0} je {1}"Diameter, Diameter*Math.PI);
}
Metóda Calculate má parameter typu objekt, hoci existuje len jeden parameter, a je to tiež typ objektu, a stále ho treba pri jeho použití konvertovať, ale našťastie môžu existovať parametre, a kombinovaním viacerých parametrov do triedy a následným odovzdaním inštancie tejto triedy ako parametra môžete dosiahnuť prenos viacerých parametrov. Napríklad čo:
trieda AddParams
{ verejné int a, b;
public AddParams(int numb1, int numb2) { a = numb1; b = numb2; }
} #endregion
Triedny program
{ static void Main (string[] args) { Console.WriteLine("***** Sčítanie pomocou objektov Thread *****"); Console.WriteLine("ID vlákna v Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = nové AddParams(10, 10); Vlákno t = nové vlákno (nové parametrizovanéVláknoŠtart(Add)); t.Start(ap); Console.ReadLine(); }
#region Metóda pridania statická prázdnota Pridať (dáta objektu) { ak (dáta sú AddParams) { Console.WriteLine("ID vlákna v Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = (AddParams)data; Console.WriteLine("{0} + {1} is {2}", ap.a, ap.b, ap.a + ap.b); } } #endregion
}
} |