Как запустить потоки поочередно?
Разбираюсь с потоками, и никак не могу понять. Как запустить поток который будет идти после окончания второго? Делал и с приоритетностю, и с Join() даже что-то пытался(но не понял его принцип). Но все равно работает не так как я хочу. В итоге, понял что это должно делаться с lock-оператором. Но все равно не получается...
class Print {
public void Display() {
lock (this) {
for (int counter = 0; counter < 5; counter++) {
Console.WriteLine("{0} -> {1}", this.GetType(), counter);
Thread.Sleep(200);
}
}
}
}
class Program {
static void Main() {
Print print = new Print();
Thread primaryThread = new Thread(new ThreadStart(print.Display));
primaryThread.Name = "Thread #1";
primaryThread.Start();
Thread secondaryThread = new Thread(RunSecondThread);
secondaryThread.Start();
}
}
Вообще задача такая, сделать 3 потока. Где 2й запускает 3й поток в фоне, а 1й потом запускается после завершения 2.
class Program {
static void Main() {
Thread primaryThread = Thread.CurrentThread;
primaryThread.Name = "Thread #1";
Thread secondaryThread = new Thread(RunSecondThread);
secondaryThread.Start();
primaryThread.Priority = ThreadPriority.Lowest;
secondaryThread.Priority = ThreadPriority.Highest;
for (int counter = 0; counter < 5; counter++) {
Console.WriteLine("{0} -> {1}", primaryThread.Name, counter);
Thread.Sleep(200);
}
}
static void RunSecondThread() {
Thread secondaryThread = Thread.CurrentThread;
secondaryThread.Name = "Thread #2";
Thread thirdThread = new Thread(RunThirdThread);
thirdThread.IsBackground = true;
thirdThread.Start();
for (int counter = 0; counter < 5; counter++) {
Console.WriteLine("{0} -> {1}", secondaryThread.Name, counter);
Thread.Sleep(500);
}
}
static void RunThirdThread() {
Thread thirdThread = Thread.CurrentThread;
thirdThread.Name = "Thread #3";
for (int counter = 0; counter < 5; counter++) {
Console.WriteLine("{0} -> {1}", thirdThread.Name, counter);
Thread.Sleep(1000);
}
}
}
Ответы (1 шт):
Автор решения: OXYGEN
→ Ссылка
Вот так это должно работать
static void Main(string[] args)
{
Thread primaryThread = Thread.CurrentThread;
primaryThread.Name = "Thread #1";
primaryThread.Priority = ThreadPriority.Lowest;
Thread secondaryThread = new Thread(RunSecondThread);
secondaryThread.Priority = ThreadPriority.Highest;
secondaryThread.Start();
secondaryThread.Join();//дождатся выполнения
//потом будет работать этот цикл
for (int counter = 0; counter < 5; counter++)
{
Console.WriteLine("{0} -> {1}", primaryThread.Name, counter);
Thread.Sleep(200);
}
Console.ReadLine();
}
на выходе получаем такой результат
Основной поток(#1) продолжает свою работу после того как поток(#2)завершился
