2014-01-24 4 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(); 
    } 

Какой запускает таймер, который запускает всю логику программы. Проблема в том, что консольное приложение закрывается, и ничего не делается. Как я могу это предотвратить? Я знаю, что если я делаю что-то вроде while (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() будет на основном потоке и, таким образом, блокирует поток до тех пор, пока у вас не будет вход)

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