Я пытаюсь изучить потоки в C#, прямо сейчас на самом новичком уровне. Я написал код ниже, чтобы понять, как можно приостановить поток.Приостановить поток в C#: Ошибка
Но я получаю исключение «ThreadStateException были необработанными: Тема не running.It не может быть приостановлен»
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace Thread_Suspend
{
class Program
{
static void Main(string[] args)
{
Thread obj = new Thread(Function1);
Console.WriteLine("Threading Starts..\n");
obj.Start();
Thread.Sleep(2000);
obj.Suspend();//Exception at this line of code
Console.WriteLine("Thread suspended");
}
static void Function1()
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Thread displayed for: " + i + "time");
}
Console.WriteLine("\nThreading done");
}
}
}
Я понимаю, что когда консоль печатает «Thread отображается» в 5 раз, поток перейдет спать в течение 2000 миллисекунд, после чего он перейдет в приостановленное состояние, но этого не произойдет. Я уверен, что здесь отсутствует ключевая концепция. Кроме того, я использую VS 2010 с .NET 4.0 в качестве целевой среды. Эксперты, пожалуйста, руководствуйтесь здесь. Любая помощь будет высоко оценена.
С уважением
Анураг
Привет, Джон, Спасибо за ответ. Как я могу приостановить поток в приведенном выше примере? – Anurag
Вы должны 'Sleep()' в 'Function1'. Поток все равно будет жив, потому что он все равно будет выполнять этот метод. –
@RobertHarvey: Если поток хочет приостановить себя, он называет «Сон» сам по себе, как говорит Роберт. Если основной поток хочет приостановить второй поток, то, очевидно, второй поток должен быть запущен в этой точке. Удаление «сна» изнутри «Main», скорее всего, сделает это, но это не очень хорошее решение, потому что тогда у вас есть состояние гонки. Я не могу сказать, чего вы пытаетесь достичь. Если вы хотите, чтобы свиной свиной грипп, просто заставьте его запустить бесконечный цикл. – Jon