什么';这是从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);
}
我通过创建一个空表单来解决这个问题,该表单在加载事件处理程序中立即关闭自己。这样可以避免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
属性。