如何在没有可见窗口的情况下启动.net Windows窗体应用程序?

我有一个.net Windows窗体应用程序,需要直接打开通知图标(系统托盘),没有可见的窗口。 我意识到我可以在onshown事件或类似的事情中做到这一点。 但如果我这样做,我会得到一个窗口的闪光。 我怎么能避免那个闪光灯? 我已经尝试修改我的Program.cs文件,如下所示:

 Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); MainForm frm = new MainForm(); frm.Visible = false; Application.Run(frm); 

但是这不起作用,因为Application.Run()使表单可见。 我很确定我会错过一个简单的答案。 任何帮助是极大的赞赏。

Application.Run()的重载不包含任何参数,因此在应用程序启动时不会立即显示表单。 当然,你必须管理导致应用程序自行终止的原因,因为它没有初始或“主要”forms供它监控。 所以例如它是你的通知图标,我相信你能够处理它。

如果您在启动应用程序时不需要主表单,则可以在此处链接到描述如何创建NotifyIcon的文章。

您可以尝试将frm上的WindowState设置为Minimized,同时将ShowInTaskbar设置为false。 另外,我不是专家,但我认为你应该处理MainForm构造函数中的可见性逻辑。

也许有点hackish,但你可以创建一个无边框Form( FormBorderStyle.None )并将它的TransparencyKey设置为它的BackColor ,禁用ShowInTaskbar ,然后将该表单提供给Application.Run()。 瞧。 🙂

这是我所拥有的表单的初始化方法的代码片段。 应用程序在托盘中运行,当用户双击通知图标时,窗口会显示。 我有处理resize等的方法,确保只能通过菜单选项关闭表单。

 public MainForm() { ...code Resize += MainForm_Resize; notifyIcon.DoubleClick += NotifyIconDoubleClick; WindowState = FormWindowState.Minimized; Hide(); } private void MainForm_Resize(object sender, EventArgs e) { if (FormWindowState.Minimized == WindowState) Hide(); } private void NotifyIconDoubleClick(object sender, EventArgs e) { Show(); try { WindowState = FormWindowState.Normal; ...more code for other stuff }catch(yadda yadda) ...code } }