Как перезапустить поток в C#.Net 4.0?

Я использую C# .Net4.0 в VS 2010. Как перезапустить Thread?

это как я хочу Abort() нить и Start() это с самого начала? Возможно ли это?

5 ответов


создайте новый экземпляр потока и выполните снова. thread1= Новый Поток(); thread1.start();


прервать поток часто является плохой идеей. Он советник. Если это бесконечный цикл, логическое значение используется для остановки потока без аборта.

bool run = true;
Thread thread = new Thread(method);
thread.start();

private void method()
{
  while(run)
  {

  }
}

чтобы остановить поток, просто установить логическое значение false и, как правило, вы можете перезапустить его позже.


нить.Abort не гарантирует, что поток завершится. Например, при длительном выполнении запроса Abort не завершит выполнение запроса или отмену потока. Фактически, поток будет жить до тех пор, пока запрос не завершится.

Если вы делаете все в управляемом коде и не блокируетесь неуправляемыми ресурсами, и вы должны прервать поток, поток.Abort () отлично подходит.

однако вы не можете вызвать Start на поток, который был завершен. Вам нужно будет создать другой поток и вызвать Start в этом потоке. Создание потоков несколько дорого, память мудрая, в .NET (по сравнению с другими языками), поэтому есть некоторые недостатки.


Если вы хотите перезапустить поток с самого начала, вы действительно хотите перезапустить выполнение определенной функции (поток кода) в потоке. Когда вы создаете поток и передаете функцию для выполнения, жизнь потока завершается, как только функция завершает свое собственное выполнение. Вам просто нужно изменить дизайн кода, который позволит перезапустить функцию с воссозданием нового потока. Но для коротких функций, я бы посоветовал использовать ThreadPool.


поскольку вы используете .NET 4.0, где MS представила "платформу совместной отмены". Вы можете прочитать больше из этого блог. Работа непосредственно с потоком (все больше и больше) не рекомендуется.