ThreadStart:
Делегатът на ThreadStart е дефиниран като void ThreadStart(), което означава, че изпълняваният метод не може да има параметри. ThreadStart threadStart=new ThreadStart(Изчисли); Thread thread=new Thread(threadStart); нишка. Start(); Public void Изчисли() { двоен диаметър=0.5; Console.Write ("Площта на окръжността с диаметър {0} е {1}"Diameter,Diameter*Math.PI); } Тук използваме делегат, който дефинира тип ThreadStart, който дефинира метода, който нишката трябва да изпълни: Изчисли, при който се изчислява обиколката на кръг с диаметър 0.5, и изходи. Това представлява най-простия пример за многонишковост, което в много случаи е достатъчно
ParameterThreadStart: ParameterThreadStart се дефинира като void ParameterizedThreadStart (object state), а функцията за стартиране на нишката, дефинирана с този делегат, може да приеме входен параметър, например:
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(Calculate) Thread thread=нов thread() ; нишка. Старт (0.9); public void Calculate(object arg)
{ двоен диаметър=двоен (arg); Console.Write ("Площта на окръжността с диаметър {0} е {1}"Diameter,Diameter*Math.PI);
}
Методът Calculate има параметър на тип обект, въпреки че има само един параметър, и той също е тип обект, и все пак трябва да се конвертира при използването му, но за щастие могат да има параметри, и чрез комбиниране на няколко параметъра в клас и предаване на екземпляра на този клас като параметър, може да се постигне прехвърляне на множество параметри. Като какво:
клас AddParams
{ публични международни а, б;
публични AddParams(int numb1, int numb2) { a = numb1; b = numb2; }
} #endregion
Програма на класа
{ static void Main(string[] args) { Console.WriteLine ("***** Добавяне с обекти на нишки *****"); Console.WriteLine("ID на нишката в Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = нови AddParams(10, 10); Thread t = new Thread(new ParameterizedThreadStart(Add)); t.start(ap); Console.ReadLine(); }
#region Метод на добавяне static void Add(object data) { ако (данните са AddParams) { Console.WriteLine("ID на нишката в Main(): {0}", Thread.CurrentThread.ManagedThreadId);
AddParams ap = (AddParams)data; Console.WriteLine("{0} + {1} е {2}", AP.A, AP.B, AP.A + AP.B); } } #endregion
}
} |