保持应用程序在没有UI的情

时间:2017-01-14 17:31:25

标签: c# console-application contextmenu

我有一个小的“控制台应用程序”,其输出类型为“Windows应用程序”(因为我不想要控制台用户界面)。我为系统托盘创建了一个ContextMenu并初始化了一个Timer。完成之后,我希望应用程序保持活动状态,直到有人使用UI关闭它。什么是最好的 / 最干净的方法?由于我没有控制台,我不能使用Readline,在任何其他情况下似乎都是这样。

    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 个答案:

答案 0 :(得分:0)

在你的情况下,更好的aproach将是带有隐藏主窗口的Windows应用程序。

对于隐藏主窗口,您可以使用Window.Hide

答案 1 :(得分:0)

我没有Windows,每种WaitOne或while(true)都会冻结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();
        }
 (...)

很多@ H.G。 Sandhagen! 当然,感谢你们所有人。

BR Matthias