как сохранить приложение Windows в C #?

У меня есть приложение со следующим кодом в моей основной функции:

var timer = new System.Threading.Timer(Callback_f, null, TimeSpan.Zero, TimeSpan.FromMinutes(srcInterval));

Хорошо, это действительно работает, но ТОЛЬКО когда я добавляю что-то, чтобы поддерживать работу моего приложения, например console.readkey() или бесконечный цикл while:

while (true) 
{

}.

Бесконечный цикл для меня не вариант, так как он занимает слишком много времени. Дело в том, что я также не могу использовать функцию console.readkey, потому что это приложение Windows.forms без форм. (т.е. когда я запускаю его как консольное приложение и помещаю в конец метод console.readkey(), он работает. Однако я хочу избежать отображения черного окна, это приложение без интерфейса, которое работает в фоновом режиме). Какие-либо предложения?


person Dex    schedule 23.12.2012    source источник
comment
Не могли бы вы уточнить, чего вы пытаетесь достичь? Не могли бы вы использовать Thread.Sleep(...) и Thread.Join(...)?   -  person Rune    schedule 23.12.2012
comment
Вам нужно будет задокументировать, как вы собираетесь завершить свою программу. Если вы не знаете, то вам, вероятно, следует рассмотреть услугу.   -  person Hans Passant    schedule 24.12.2012


Ответы (1)


попробуйте использовать метод Thread.Join();

person burning_LEGION    schedule 23.12.2012
comment
@Dex: вы запускаете таймер и ничего не делаете в основном потоке. Почему бы просто основному потоку не выполнять работу в бесконечном цикле и Sleep(srcInterval) между задачами? - person Ed S.; 23.12.2012
comment
@ Эд С. Не будет ли он слишком потреблять ресурсы процессора и ресурсы? - person Dex; 24.12.2012
comment
@Dex: № Sleep() уступит ваше процессорное время другим процессам. Как вы думаете, что делает Таймер? Даже Sleep(1) превратит ваш чрезмерно агрессивный цикл while(true) во что-то, что само по себе требует очень мало ресурсов процессора. - person Ed S.; 24.12.2012
comment
@ Эд С. Я тоже попробую. Похоже на более простое решение, я думал, что таймер работает как-то более аккуратно, чем метод sleep(). - person Dex; 24.12.2012
comment
@Dex: я просто не вижу смысла запускать таймер, когда основному потоку вообще нечего делать. Используйте новый поток, когда вам нужно выполнить операцию в тандеме с тем, что происходит в основном потоке. Все, что вам нужно, это void main(...) { while(true) { DoSomething(); if(someExitCondition) break; Sleep(srcInterval); } } - person Ed S.; 24.12.2012