【发布时间】:2015-04-29 08:14:40
【问题描述】:
这是我的程序课:
static class Program
{
private class MyAppContext : ApplicationContext
{
public MyAppContext()
{
//Exit delegate
Application.ApplicationExit += new EventHandler(this.OnApplicationExit);
//Show the main form
MainForm main = new MainForm();
main.Show();
}
private void OnApplicationExit(object sender, EventArgs e)
{
//Cleanup code...
}
}
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MyAppContext());
}
}
当我在调试模式下运行应用程序并关闭它时,主窗体关闭,但应用程序仍在运行,我必须单击 Stop Debugging 才能完全终止它。
在主窗体中,我所做的只是:
protected override void OnFormClosed(FormClosedEventArgs e)
{
base.OnFormClosed(e);
Application.Exit();
}
我做错了什么?
【问题讨论】:
-
您是否在代码中启动任何线程?
-
所有表单关闭后需要调用ExitThread()。
-
@JonSkeet 没有启动线程,虽然我有一个带有
HttpClient实例的静态类。 -
也就是说,您为什么使用
ApplicationContext模式?如果您不是特别需要它,最好只运行Application.Run(new MainForm());。ApplicationContext仅在您没有单一主表单时才真正有用 - 很明显这不是您的情况(因为无论如何您在OnFormClosed中调用Application.Exit)。 -
@Ivan-MarkDebono 你不要那样关闭应用程序,这是不正确的