2017-01-14 9 views
0

У меня есть небольшое «консольное приложение» с типом вывода «Приложение Windows» (поскольку я не хочу консольный интерфейс). Я создаю ContextMenu для системного трея и инициализирую таймер. После того, как я это сделал, я хочу, чтобы приложение оставалось в живых, пока кто-то не закрыл его с помощью пользовательского интерфейса. Что такое best/cleanest подход здесь? Поскольку у меня нет консоли, я не могу использовать Readline, что, похоже, подходит для любого другого случая.Сохранять приложение без UI

private static void Main() 
    { 
     var trayMenu = new ContextMenu(); 
     trayMenu.MenuItems.Add("Exit", OnExit); 

     var notifyIcon = new NotifyIcon 
     { 
      Text = @"Foo Bar", 
      ContextMenu = trayMenu, 
      Visible = true 
     }; 

     var timer = new Timer {Interval = 20000}; 
     timer.Tick += DoStuff; 
     timer.Start(); 

     //KEEP SOMEHOW ALIVE 
    } 
+2

Престол [Как я могу сделать приложение, которое работает только в системном трее .NET, Windows Forms?] (Http://stackoverflow.com/questions/995195/how-can-i-make -a-нетто-окна-форм-приложения, которые только для спусков-в-система-тра) –

ответ

0

В вашем случае лучше aproach будет оконным приложением со скрытым главным окном.

Для скрытия главного окна вы можете использовать Window.Hide

0

У меня нет Windows, и каждый вид WaitOne или в то время (правда) заморозит контекстное меню TrayIcon. Теперь я пошел с тем, что @ H.G. Sandhagen связаны как комментарий: https://stackoverflow.com/a/10250051/4079949

Это мое решение:

[STAThread] 
    private static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new MyCustomApplicationContext()); 
    } 

    private class MyCustomApplicationContext : ApplicationContext 
    { 
     public MyCustomApplicationContext() 
     { 
      var trayMenu = new ContextMenu(); 
      trayMenu.MenuItems.Add("Exit", OnExit); 

      var notifyIcon = new NotifyIcon 
      { 
       Text = @"Foo Bar", 
       ContextMenu = trayMenu, 
       Visible = true 
      }; 

      var timer = new Timer {Interval = 20000}; 
      timer.Tick += DoStuff; 
      timer.Start(); 
     } 
(...) 

Thx много @ H.G. Sandhagen! Thx всем вам, конечно.

BR Matthias