2014-01-24 108 views
1

所以我有這個簡單的代碼:從.Net.Timer後關閉,防止我的控制檯應用程序啓動

static void Main(string[] args) 
    { 
     var timer = new Timer(0.5 * 60 * 1000); // 0.5 minutes times 60 seconds times 1000 miliseconds 
     timer.Elapsed += new System.Timers.ElapsedEventHandler(Start); 
     timer.AutoReset = true;    
     timer.Start(); 
    } 

哪個開始啓動整個程序邏輯的計時器。問題是,控制檯應用程序關閉,沒有任何事情完成。我如何防止這種情況?我知道,如果我做了一些像(true)一樣的東西,但它看起來並不像是一個優雅/合適的解決方案。

+0

由於'timer.Start()'方法觸發新線程。一旦你調用它,它不會阻止你當前的(主)線程。 如果您正在等待計時器完成,您可能會想要使用回調。 – Brandon

+1

「不關閉」是什麼意思?堅持到永遠?只需使用Console.ReadLine() –

+0

@Brandon我知道這一點。這就是爲什麼我說的是(真)的事情。標題是阻止我的控制檯應用程序關閉,這並沒有幫助我。 – Gaspa79

回答

5

也許嘗試

Console.Read(); 

在代碼的最後

由於這個控制檯窗口將不會只要用戶將不會按一個鍵關閉。

-1

由於定時器啓動,您的控制檯應用程序不會結束。它結束是因爲程序到達Main()方法的末尾。

無論您採取什麼措施來防止程序退出Main()都會有所幫助。雖然許多提出的解決方案實際上是這樣做我想強調一下這個事實,即它不是導致問題的計時器。

1

添加Console.ReadKey();這將允許您通過按任意鍵關閉控制檯窗口。

static void Main(string[] args) 
    { 
     var timer = new Timer(0.5 * 60 * 1000); // 0.5 minutes times 60 seconds times 1000 miliseconds 
     timer.Elapsed += new System.Timers.ElapsedEventHandler(Start); 
     timer.AutoReset = true;    
     timer.Start(); 

     Console.ReadKey(); 
    } 
1

如果你想只運行一個計時器並等待,那麼Console.Read()是你的朋友。

你的代碼終止的原因是因爲函數初始化定時器,啓動定時器,然後......打到Main函數的末尾。結果,該功能退出。

當前的代碼沒有做任何有用的事情(除了啓動一個被忽略的定時器)。

如果您想看到您的計時器正在運行,請在啓動計時器後執行其他一些工作。然後,在一段時間後停止計時器並打印/評估您認爲合適的方式。 (定時器不會在主線程上運行,而類似於Console.Read()的東西將會在主線程上,因此,在輸入之前會阻塞線程)

相關問題