C# 在最后一个表单关闭后,如何关闭应用程序?

C# 在最后一个表单关闭后,如何关闭应用程序?,c#,.net,winforms,C#,.net,Winforms,我在C#工作。我在Program.Main中启动。这将打开frmSplash。frmSplash执行全部初始化(Errs收集/数据库连接等),然后打开frmGeneric。frmGeneric从数据库加载一组信息,并使用数据库中定义的控件填充自身。它可能会打开frmGeneric的其他实例。事实上,它可能会在其他实例关闭之前自行关闭 当用户单击“继续”按钮时,初始化过程在frmSplash中出现。目前,一旦显示了frmGeneric的第一个实例,我就在frmSplash中调用this.Hide(

我在C#工作。我在Program.Main中启动。这将打开frmSplash。frmSplash执行全部初始化(Errs收集/数据库连接等),然后打开frmGeneric。frmGeneric从数据库加载一组信息,并使用数据库中定义的控件填充自身。它可能会打开frmGeneric的其他实例。事实上,它可能会在其他实例关闭之前自行关闭

当用户单击“继续”按钮时,初始化过程在frmSplash中出现。目前,一旦显示了frmGeneric的第一个实例,我就在frmSplash中调用
this.Hide()
,但实际上我希望frmSplash卸载

如果我在frmSplash中调用
this.Close()
,即使在显示frmGeneric之后,整个应用程序也会关闭

显然,最后一个关闭的frmGeneric不会知道它是最后一个(它是通用的)。如何在初始化后关闭frmSplash而不退出应用程序

private void cmdContinue\u单击(对象发送方,事件参数e)
{
Globals oG=null;
App-oApp=null;
frmGeneric of形式=空;
尝试
{
Text=“初始化全局对象…”;
oG=新全局();
//一些其他的东西被修改过
txtStatus.Text=“显示启动表单…”;
oForm=新frmGeneric();
oForm.Globals=oG;
如果(!oForm.RunForm()引发新异常(“无法运行表单”);
//我受够了
这个。关闭();
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
Application.Exit();
}
}

在上述代码中的this.Close()处,整个应用程序关闭,即使oForm已加载且可见。

问题有两点:

  • 显示闪屏
  • 关闭最后一个表单(不是主表单)后关闭应用程序
  • 对于这两种需求,您可以依赖于Microsoft.VisualBasic.dll中存在的

    • 它允许您指定启动应用程序时显示的启动屏幕
    • 它还允许您指定在关闭主窗体后关闭应用程序或在关闭所有窗体后关闭应用程序
    示例

    using System;
    using System.Windows.Forms;
    using Microsoft.VisualBasic.ApplicationServices;
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(true);
            var app = new MyApplication();
            app.Run(Environment.GetCommandLineArgs());
        }
    }
    public class MyApplication : WindowsFormsApplicationBase
    {
        public MyApplication()
        {
            this.ShutdownStyle = ShutdownMode.AfterAllFormsClose;
        }
        protected override void OnCreateMainForm()
        {
            MainForm = new YourMainForm();
        }
        protected override void OnCreateSplashScreen()
        {
            SplashScreen = new YourSplashForm();
        }
    }
    
    使用系统;
    使用System.Windows.Forms;
    使用Microsoft.VisualBasic.ApplicationServices;
    静态类程序
    {
    /// 
    ///应用程序的主要入口点。
    /// 
    [状态线程]
    静态void Main()
    {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(true);
    var app=new MyApplication();
    app.Run(Environment.GetCommandLineArgs());
    }
    }
    公共类MyApplication:WindowsFormsApplicationBase
    {
    公共应用程序()
    {
    this.ShutdownStyle=ShutdownMode.AfterAllFormsClose;
    }
    受保护的重写void OnCreateMainForm()
    {
    MainForm=新的YourMainForm();
    }
    受保护的覆盖无效OnCreateSplashScreen()
    {
    SplashScreen=新的SplashForm();
    }
    }
    
    尝试调用Visibile属性而不是this.Close或this.Hide并检查它是否有效。因此基本上是这样的:frmSplash.Visible=false;//其中frmSplash是您希望隐藏的启动屏幕。@Rohan-好吧,行为不会因此而改变,我并不感到惊讶。将frmSplash的Visible属性设置为false不会解除锁定我想卸载frmSplash并保持frmGeneric已加载。但是,调用frmSplashClose()会关闭应用程序。非常感谢您的努力。