ThreadStart:
Delegát ThreadStart je definován jako void ThreadStart(), což znamená, že metoda vykonaná nemůže mít parametry. ThreadStart threadStart=new ThreadStart(Calculate); Vlákno = nové Vlákno(vláknoStart); vlákno. Start(); public void Calculate() { dvojitý průměr=0,5; Console.write("Plocha kruhu s průměrem {0} je {1}"Diameter, Diameter*Math.PI); } Zde používáme delegáta, který definuje typ ThreadStart, který definuje metodu, kterou vlákno potřebuje k vykonání: Calculate, kde se vypočítá obvod kruhu s průměrem 0,5, a výstup. To představuje nejjednodušší příklad vícevláknového zpracování, což je v mnoha případech dostačující
ParameterThreadStart: ParameterThreadStart je definován jako void ParameterizedThreadStart(stav objektu) a startovací funkce vlákna definovaného pomocí tohoto delegáta může přijímat vstupní parametr, například:
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate) Vlákno = nové Vlákno() ; vlákno. Start (0,9); veřejná prázdnota Calculate(objekt arg)
{ dvojitý průměr=dvojitý(arg); Console.write("Plocha kruhu s průměrem {0} je {1}"Diameter, Diameter*Math.PI);
}
Metoda Calculate má parametr typu objekt, i když existuje pouze jeden parametr, a je to také typ objektu, a při jeho použití je stále potřeba převádět, ale naštěstí mohou existovat parametry, a kombinací více parametrů do třídy a následným předáním instance této třídy jako parametru lze dosáhnout přenosu více parametrů. Jako co:
třída AddParams
{ veřejná int a, b;
public AddParams(int numb1, int numb2) { a = numb1; b = číslo2; }
} #endregion
Program tříd
{ static void Main (string[] args) { Console.WriteLine("***** Sčítání pomocí objektů 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áknoStart(Add)); t.Start(ap); Console.ReadLine(); }
#region Metoda přidání statická prázdnota Přidat (data objektu) { pokud (data jsou 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
}
} |