2017-08-28 18 views
-1

我在我的控制檯應用程序的主要方法中使用Timer。現在我使用一些while循環來讓我的主線程保持活躍狀態​​,這是我在Web上發現的。因爲當它死了,我的線程,執行方法,我傳遞給定時器也死了。使用Threading.Timer保持主線程活着c#

問題:是阻塞我的主線程還是可以使用這種方式?還是有更好的方法來保持主線程活着而不阻塞任何東西?

public void Run() 
{ 
    Logger.Trace("Timer Started."); 
    Timer.Change(0, Timeout.Infinite); 
    Console.WriteLine("Press ESC to stop..."); 
    while (!(Console.KeyAvailable && Console.ReadKey(true).Key == ConsoleKey.Escape)) 
    { } 
} 
+0

您可以使用調度計時器會做一些背景等工作的普通的方式,並會調用到你的主線程,當有需要(例如每個1s):http://www.wpf-tutorial.com/misc/dispatchertimer/ – sTrenat

+0

@sTrenat它將是控制檯或Windows服務應用程序和Threading.Timer已經完成了我需要的所有工作。我只是想知道一個線程安全的方式來保持我的主線程而不阻塞它。 –

+0

*「是否可以使用這種方式」* - 沒關係。在控制檯應用程序結束時使用['Console.ReadKey'](https://msdn.microsoft.com/zh-cn/library/x3h8xffw(v = vs.110).aspx)是防止它出現的常用方法精加工。 – Sinatr

回答