我有一个Windows窗体应用程序,其中Form1对象的初始WindowState ==最小化。在应用程序确实启动最小化等意义上,这可以正常工作。但是,应用程序显示在taskmgr的应用程序选项卡中,这是不可取的。
我个人只能在Vista上重现这一点。我无法在WinXP或Windows 2003上重现这一点。我的客户说过这确实发生在WinXP sp3上。因此,它可能与安装的.NET框架服务包有关,而不一定是操作系统问题 - 或者他们向我传递了关于winxp的错误信息。
无论具体组合是什么......我都需要修复。
我尝试过:
this.WindowState==Minimized
和this.Hide()。这没有用。 (Form_Load
事件处理程序会做什么不同吗?我过去曾遇到过类似的问题,Form_Load似乎从来没有做过与表单构造函数不同的事情,所以我没有尝试过)解决方法:
MinimizeApplication()
方法执行this.WindowState=Minimized; this.Hide();
,如果在应用程序加载后我单击应用程序SystemTray(aka NotifyIcon
)上的上下文菜单快捷方式,调用MinimizeApplication()
它从任务管理员那里消失了。MinimizeApplication()
。但是,这似乎是一个真正的黑客。请注意:应用程序选项卡和taskmgr上的进程选项卡之间存在差异。我不是想做一些粗略的事情,比如隐藏我的应用程序正在运行的所有证据。
修改1 这就是我实现变通方法的方式。也许它会对这个问题有所了解。
Timer mMinimizeTimer = null;
public Form1(string[] args)
{
this.WindowState = FormWindowState.Minimized;
this.Hide();
mMinimizeTimer = new Timer();
mMinimizeTimer.Tick += new EventHandler(mMinimizeTimer_Tick);
mMinimizeTimer.Interval = 500;
mMinimizeTimer.Enabled = true;
}
void mMinimizeTimer_Tick(object sender, EventArgs e)
{
// Forces minimize after application starts. This is a workaround to prevent
// application from showing up in the taskmanager -> Applications tab on Vista.
this.Hide();
mMinimizeTimer.Enabled = false;
}
答案 0 :(得分:3)
尝试在ShowInTaskbar = false
上设置Form
。
答案 1 :(得分:3)
您是否尝试过设置Form.ShowInTaskBar = false?
答案 2 :(得分:1)
我想在main
方法中,您可以通过调用
Application.Run(new Form1())
尝试这样做:
Form1 frm = new Form1();
Application.Run();
这样,即使在TaskManager应用程序选项卡中,表单也会被实例化,但根本不显示。 (Application.Run将表单作为参数visiblity设置为true)
P.S。:为什么不创建.NET服务而不是.NET WinForm应用程序?
答案 3 :(得分:1)
你需要一个表格来展示吗?
您可以启动应用程序控制器,而不是从表单开始,这可以完成您的工作
您可以查看application.Run()或Application.Run(context)方法来启动您的应用
答案 4 :(得分:0)
我从来没有找到我希望的这个问题的答案。我仍在使用我在上面的问题中概述的解决方法。现在,通过让我的客户将其安装在有问题的PC上进行“现场测试”,到目前为止一直很好。
如果有人有更好的解决方案/解释操作系统/ .NET版本导致此行为,请发布它!