.net 保持Windows应用程序在没有窗体的情况下运行

.net 保持Windows应用程序在没有窗体的情况下运行,.net,winforms,.net,Winforms,我创建了一个Windows应用程序,但没有显示窗口窗体。我需要保持我的应用程序运行。现在,在执行所有代码后,应用程序停止。 我尝试下面的方法 public void RunForm() { var frm=new Form(); Application.Run(frm); } 应用程序不会停止,但会显示表单。如何在不显示表单的情况下继续运行应用程序?是否只想隐藏表单?我很难理解在没有GUI的情况下使用GUI应用程序的目的,您可能应该只构建一个Windows服务。无论如何,在表

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

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

}

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

是否只想隐藏表单?我很难理解在没有GUI的情况下使用GUI应用程序的目的,您可能应该只构建一个Windows服务。无论如何,在表单加载事件中,您可以通过调用this.hide来隐藏表单。

是否只想隐藏表单?我很难理解在没有GUI的情况下使用GUI应用程序的目的,您可能应该只构建一个Windows服务。无论如何,在表单加载事件中,您可以通过调用this.hide来隐藏表单。

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

这取决于应用程序在不可见时应该做什么,以及是否需要在没有当前登录用户、在不同帐户上运行时运行的服务的功能


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

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

这取决于应用程序在不可见时应该做什么,以及是否需要在没有当前登录用户、在不同帐户上运行时运行的服务的功能

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

您可以使用应用程序。运行以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
{
    //    ...
}
您可以使用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
{
    //    ...
}

只需调用应用程序。运行,不传递任何内容。它属于你的主要方法

这将使主线程保持活动状态,并对Windows通知作出响应。当然,它们并不多,因为你已经没有用户界面了。计时器会工作的。一个通知图标将工作。由pinvoking RegisterHotKey注册的热键将起作用。低级windows钩子将起作用


而SystemEvents将起作用。这一点很重要,您需要订阅其SessionEnding事件,以了解用户何时注销或关闭Windows,您需要终止应用程序。您可以通过调用Application.ExitThread来执行此操作。

只需调用Application.Run,不传递任何内容。它属于你的主要方法

这将使主线程保持活动状态,并对Windows通知作出响应。当然,它们并不多,因为你已经没有用户界面了。计时器会工作的。一个通知图标将工作。由pinvoking RegisterHotKey注册的热键将起作用。低级windows钩子将起作用


而SystemEvents将起作用。这一点很重要,您需要订阅其SessionEnding事件,以了解用户何时注销或关闭Windows,您需要终止应用程序。您可以通过调用Application.ExitThread来执行此操作。

我的应用程序以两种模式运行。如果模式为WindowsForm,则从显示窗口窗体的配置中获取,否则会执行一些代码并侦听事件。因此,我的应用程序始终保持运行一个想法可能是将应用程序逻辑放在独立的UI无关程序集中,以避免依赖Windows窗体功能。我的应用程序以两种模式运行。如果模式为WindowsForm,则从显示窗口窗体的配置中获取,否则会执行一些代码并侦听事件。因此,我的应用程序始终保持运行一个想法可能是将应用程序逻辑放在一个独立的UI无关程序集中,以避免依赖Windows窗体功能。这可能会有所帮助。。这可能会有帮助。。