【问题标题】:Keep Application alive without UI [duplicate]在没有 UI 的情况下保持应用程序存活 [重复]
【发布时间】:2017-05-29 21:43:48
【问题描述】:

我有一个输出类型为“Windows 应用程序”的小型“控制台应用程序”(因为我不想要控制台 UI)。我为系统托盘创建了一个 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
    }

【问题讨论】:

标签: c# console-application contextmenu


【解决方案1】:

在您的情况下,更好的方法是带有隐藏主窗口的 Windows 应用程序。

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

【讨论】:

    【解决方案2】:

    我没有 Windows,每种 WaitOne 或 while(true) 都会冻结托盘图标的上下文菜单。我现在选择了@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.桑哈根! 当然,谢谢大家。

    BR马蒂亚斯

    【讨论】:

      猜你喜欢
      • 2011-09-10
      • 2019-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多