1

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

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

}

应用程序没有停止,而是显示形式。如何在不显示表单的情况下继续运行我的应用程序?

4

4 回答 4

6

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

这使您的主线程保持活跃并响应 Windows 通知。当然,它们并不多,因为您不再拥有用户界面。计时器将起作用。NotifyIcon 将起作用。通过 pinvoking RegisterHotKey() 注册的热键将起作用。低级别的 windows 挂钩将起作用。

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

于 2013-01-21T13:16:07.060 回答
1

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

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

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

于 2013-01-21T12:38:00.143 回答
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
{
    //    ...
}
于 2013-01-21T13:09:22.907 回答
0

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

于 2013-01-21T12:32:57.073 回答