什么';这是从WindowsFormsApplicationBase.OnCreateMainForm()退出应用

本文关键字:OnCreateMainForm 退出 应用 WindowsFormsApplicationBase 什么 | 更新日期: 2023-09-27 17:57:41

让我们假设WindowsFormsApplicationBase.OnCreateMainForm()的时候出现了问题,我如何"温和"地退出应用程序?我想像按下关闭按钮一样退出,所以我想Environment.Exit()不会很合适,因为它会立即终止应用程序,并且可能不允许应用程序自行清理。

我的代码如下:

 public class MyApp : WindowsFormsApplicationBase
    {
        public MyApp()
        {
            this.IsSingleInstance = true;
        }
        protected override void OnCreateSplashScreen()
        {
            this.SplashScreen = new splashForm();
        }
        protected override void OnCreateMainForm()
        {
          if(!do_something()) {
            /* something got wrong, how do I exit application here? */
          }
          this.MainForm = new Form1(arg);
        }

我的Main()函数:

[STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            new MyApp().Run(args);
         }

什么';这是从WindowsFormsApplicationBase.OnCreateMainForm()退出应用

我通过创建一个空表单来解决这个问题,该表单在加载事件处理程序中立即关闭自己。这样可以避免NoStartupFormException

    public partial class SelfClosingForm : Form
    {
        public SelfClosingForm()
        {
            InitializeComponent();
        }
        private void SelfClosingForm_Load(object sender, EventArgs e)
        {
            Close();
        }
    }
    protected override void OnCreateMainForm()
    {
        ...
        if (error)
        {
            //this is need to avoid the app hard crashing with NoStartupFormException
            this.MainForm = new SelfClosingForm();
            return;
        }               
        ...

只需使用return:

protected override void OnCreateMainForm()
{
    if(!do_something())
    {
        return;
    }
    // This won't be executed if '!do_something()' is true.
    this.MainForm = new Form1(arg);
}

这将退出当前线程,因此不会设置MainForm属性。

相关文章:
  • 没有找到相关文章