在自动运行时隐藏C#主窗体

4
我在网上找到了一个非常简单的方法,可以隐藏我的应用程序中的主表单:
  • 创建控制台应用程序

  • 将输出类型设置为Windows窗体应用程序

当我从Visual Studio中的调试或手动运行应用程序时,这个方法完美地运行。
然而...
我还将此应用程序设置为随Windows(在本例中为Windows 7)自动启动,这样我就不必每次手动启动它。但是,在这种情况下,会有一个非常短暂的时刻,我仍然可以看到一个全屏表单闪烁。有没有办法防止这种情况发生?
编辑:人们似乎忽略了一个重要的事情。该项目被创建为控制台应用程序,因此它没有表单或Application.Run()方法。它只有一个像任何其他控制台应用程序一样的单个静态Main方法。
编辑2:出于兴趣,我应该创建一个普通的WinForms项目,并尝试使用建议的答案或其他解决方案来隐藏该主窗口吗?
谢谢!

2
可能是Single Form Hide on Startup的重复问题。 - Brad Christie
1
您是否需要表单,还是只需要让您的exe运行而不被看到? - Daniel Mošmondor
@Daniel,该应用程序没有窗体,但在系统启动时仍会短暂显示一个窗体。期望的结果是一个不可见的exe文件(如果它在任务管理器中显示也可以)。 - SaphuA
Occam's razor认为你看到的输出来自于另一个在登录时启动的进程。使用msconfig并临时禁用除你自己之外的所有内容。 - Hans Passant
我添加了一些作为答案,也许可以帮助... - Daniel Mošmondor
6个回答

3
我刚刚测试了这个:
 private void Form1_Load(object sender, EventArgs e)
    {
      this.Hide();
    }

还需设置

this.WindowState = System.Windows.Forms.FormWindowState.Minimized;

3

@SaphuA,你的主线程上根本没有user32消息循环吗?我想知道这是否可能是一个因素。尝试在你的Main顶部调用Application.DoEvents();它对其行为有任何影响吗? - Jeffrey Hantin

2
尝试将应用程序从任务栏中隐藏。
请使用以下代码进行操作。
protected override void OnLoad(EventArgs e)
   {
    Visible = false; // Hide form window.
    ShowInTaskbar = false; // Remove from taskbar.
    Opacity = 0;

    base.OnLoad(e);
   }

Thanks. Ruhul


2
主窗体不能直接隐藏。在窗体加载后,它必须执行某些操作。
类似这样的操作:
private void Form1_Load(object sender, EventArgs e)
{
  this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
  for (int i = 0; i <= 100; i++)
  {
    progressBar1.ForeColor = Color.Blue;
    progressBar1.Value = i;
    System.Threading.Thread.Sleep(40);
    if (progressBar1.Value == 100)
    {
      Form12 f1 = new Form12();
      f1.Show();
    }
  }
  this.Opacity = 0;
  this.Visible = false;
}

1
你能否重新表达一下你的问题?很难理解你的意思和你想要实现什么。 - Bakuriu

0

你可能看到的是命令窗口的出现和消失。

我建议将其创建为表单,然后按照Jeffery建议的方式进行操作,或者将其创建并安装为服务,每次启动。


谢谢你的回复。你以为命令窗口会弹出,但我相当确定它是一个WinForms窗口,因为它是白色的。很奇怪,对吧? - SaphuA

0

不要使用

Application.Run(new MainForm())

尽管做你需要做的事情,不需要任何形式。你的应用程序将不会在任何地方显示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接