2013-07-04 22 views
9

C# 'da el ile devam edene kadar beklemede/uyku durumuna bir iş parçacığı nasıl yerleştirebilirim?Bir iş parçacığı manuel olarak yeniden başlatılana kadar duraklatılıyor

Şu anda iş parçacığı iptal ediyorum ama bu aradığım şey değil. İplik, uyanması için bir şey tetikleyene kadar uyku/duraklama yapmalıdır.

+1

Bunu daha önce hiç yapmamıştım ama engelleme çizgisinde düşünüyorum ManualResetEvent kullanarak iş parçacığı. –

+0

@ByteBlast: Bir kopya gibi görünüyor, ancak diğer sorudaki yanıt özellikle harika değil:/ – Ian

+0

Bunu yalnızca bir arka plan iş parçacığına yaptığınızdan emin olun. Bir UI iş parçacığı (COM STA'ya katılan herhangi bir iş parçacığı, genellikle ana iş parçacığı ve genellikle herhangi bir nedenle bir pencereye sahip herhangi bir iş parçacığı) * iletileri * çalıştırmaya ve pompalamaya devam etmeli veya kararlılık sorunlarına neden olacaktır. –

cevap

18

Bunu bir ManualResetEvent aracılığıyla yapmalısınız. Başka bir iş parçacığı üzerinde

ManualResetEvent mre = new ManualResetEvent(); 
mre.WaitOne(); // This will wait 

, açıkçası ManualResetEvent örneği başvurusu gerekir.

mre.Set(); // Tells the other thread to go again 

şey yapmak için başka bir iş parçacığı bekleyin biraz metin yazdırmak ve daha sonra kaldığı yerden devam edecektir Tam örnek:

class Program 
{ 
    private static ManualResetEvent mre = new ManualResetEvent(false); 

    static void Main(string[] args) 
    { 
     Thread t = new Thread(new ThreadStart(SleepAndSet)); 
     t.Start(); 

     Console.WriteLine("Waiting"); 
     mre.WaitOne(); 
     Console.WriteLine("Resuming"); 
    } 

    public static void SleepAndSet() 
    { 
     Thread.Sleep(2000); 
     mre.Set(); 
    } 
} 
+0

Yardımlarınız için teşekkür ederim. Gerçekten onu takdir ederim! –

+0

@knight: Sorun değil, yardım ederse cevap olarak kabul etmeyi unutmayın. – Ian

+0

Evet, üzgünüm unuttum :) –

İlgili konular