保持Windows应用程序在没有表单的情

时间:2013-01-21 12:28:37

标签: .net winforms

我创建了一个Windows应用程序而没有显示窗口表单。我需要保持我的应用程序运行。现在执行完所有代码后,应用程序就会停止。 我尝试下面的方式。

public void RunForm()
{
    var frm=new Form();
    Application.Run(frm);

}

应用程序未停止但显示表单。如何在不显示表单的情况下继续运行我的应用程序?

4 个答案:

答案 0 :(得分:6)

只需调用Application.Run()并且不传递任何内容。它属于您的Main()方法。

这可以使主线程保持活动状态并响应Windows通知。当然,由于你不再拥有用户界面,所以它们并不多。计时器将起作用。 NotifyIcon将起作用。通过pinvoking RegisterHotKey()注册的热键将起作用。一个低级别的窗口挂钩可以工作。

SystemEvents将起作用。这一点很重要,您需要订阅其SessionEnding事件以了解用户何时注销或关闭Windows,您需要终止您的应用。你通过调用Application.ExitThread()来完成。

答案 1 :(得分:1)

您可以添加通知图标,以便可以通过菜单项关闭应用程序/表单,也可以创建服务而不是应用程序。

这取决于应用程序在不可见时应该执行的操作以及是否需要服务的功能(当没有当前登录用户时运行,在其他帐户上运行)

您甚至可以将这两者结合起来:安装服务并让表单应用程序在启动时连接到它(WCF?)。这样,用户可以在服务继续运行时关闭表单应用程序。

答案 2 :(得分:1)

您可以使用Application.Run()重载来获取ApplicationContext的实例。 ApplicationContext必须明确调用Application.Exit()才能结束执行。

public class Program
{
    [STAThread]
    static void Main()
    {
        Application.EnabledVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        ApplicationContext context = new MyContext();
        Application.Run(context);
    }
}

public class MyContext : ApplicationContext
{
    //    ...
}

答案 3 :(得分:0)

你只是想隐藏表格吗?我很难看到这个目的(拥有一个没有GUI的GUI应用程序),你应该只是构建一个Windows服务。无论如何,在表单加载事件中,您可以通过调用this.Hide()来隐藏表单。