2010-12-31 3 views
2

Я использую следующий код для создания и выполнения нити мне нужно, чтобы остановить его, но не могу видеть нить .SleepПриостановка темы

каких-либо идеи, как я могу остановить на некоторое время исполнения там?

var t = new Thread(() => 
{ 
try 
    { 
      //Line 1 
      Pause here 
      //Line 2 
      Pause here 
      //Line 3 
    } 
    catch (Exception ca) 
    { 
      MessageBox.Show(ca.Message); 
    } 
    }); 
    t.SetApartmentState(ApartmentState.STA); 
    t.Start(); 
+0

Любая идея, почему Thread.Sleep нельзя использовать? – ShahidAzim

+0

Примечание: 'MessageBox.Show' не будет работать в потоке, вы вызываете это в основном потоке. – Guffa

ответ

5

Если вы хотите сказать, что Thread должен ждать определенной контрольной точки, пока какой-либо другой поток не попросит ее продолжить, один хороший вариант - использовать AutoResetEvent.

0

Вы ищете метод System.Threading.Thread.Sleep()?

0

добавить эту строку в верхней части кода:

using System.Threading; 

, то вы можете увидеть Thread.Sleep()

4
t.SetApartmentState(ApartmentState.STA); 

Я буду работать из предположения, что это было сделано намеренно. Пара вещей у вас есть сделать, чтобы выполнить контракт STA. У вас есть, чтобы прокачать контур сообщения, вызвать Application.Run(). И вы не можете пауза, которая блокирует любой маршалированный вызов и делает тупик очень вероятным.

Не проблема, когда вы накидываете контур сообщения, вы всегда находитесь в состоянии ожидания «пауза». Сделайте код так же, как вы обычно делаете в основном потоке графического интерфейса. Application.ExitThread завершает поток.

Смежные вопросы