2014-07-18 171 views
1

我知道一個線程將在所有已分配的代碼完成時終止,但是如何使它停留在等待事件呢?下面是一個簡單的看看我的代碼,這樣你就可以更好地理解我的問題是什麼:防止線程結束

public static class TimeUpdater 
{ 

     static TimeUpdater() 
     { 
      //Initialize the Timer object 
      timer = new Timer(); 
      timer.Interval = 1000; 
      timer.Tick += timer_Tick; 
     } 

     public static void StartTimer() 
     { 
      timer.Start(); 
     } 

     private static void timer_Tick(object sender, EventArgs e) 
     { 
      //Do something   
     } 

} 

從主線程,這裏是怎麼了調用這些方法:

 Thread timeThread = new Thread(TimeUpdater.StartTimer); 
     timeThread.Name = "Time Updater"; 

     timeThread.Start(); 

這樣做是什麼它進入StartTimer()方法內部,運行它,然後該線程終止,而不必進入事件處理程序timer_Tick。如果我從主線程調用StartTimer(),它工作正常。

任何人都可以發現問題?乾杯。

+2

你爲什麼使用線程*和*計時器?爲什麼不使用定時器或只是一個線程? –

+0

我正在使用一個線程和一個計時器,因爲我希望操作每秒鐘在輔助線程上運行。 – TheGateKeeper

+1

你的意思是第三個線程?您已經有了一個輔助線程,即您開始的線程。計時器將在另一個線程上運行。這是你想要的嗎?如果是這樣,答案可能是讓第一個線程等待一個事件對象(ManualResetEvent或AutoResetEvent)並讓計時器滴答事件發出該事件對象的信號。 –

回答

1

您正在單獨的線程上啓動計時器。啓動計時器是一項非常快速的操作。這就是爲什麼你的線程立即完成。當時間到期時,Tick事件將在線程池中異步啓動。

如果你想要一個線程等待某些東西,那麼你應該在代碼中插入代碼來等待某個東西。此刻你不會等待任何事情。

如果你想運行定時器程序,只需調用它。

+0

我不能只調用計時器程序,我希望它每1秒運行一次。我怎樣才能讓它等待?抱歉,我是多線程新手。 – TheGateKeeper

+0

等待**爲**做什麼? – usr

1

顯然我不需要使用Timer對象。這是我如何使它的工作:

public static void StartTimer() 
    { 
     while (true) 
     { 
      UpdateTime(); 
      Thread.Sleep(1000); 
     } 
    } 

感謝您的幫助傢伙!

0

在您的StartTimer方法中,您可以旋轉無限循環並在需要時調用Thread.Sleep以延遲執行。我知道你已經知道了。另一個想法是使用計時器,但不是從工作線程開始它,而是從主線程啓動它。在這裏你根本不需要手動創建線程。

相關問題