从启动画面退出c#app

时间:2011-02-24 20:59:34

标签: c# .net exit splash-screen

我正在为启动时运行的c#使用启动画面并检查应用程序许可证。

我从主窗体中显示这样的启动:

public partial class Form1 : Form
{
    static bool stopThreads = false;
    static bool gridChanged = false;

    public Form1()
    {
        InitializeComponent();
        Thread th = new Thread(new ThreadStart(DoSplash));
        th.Start();
        th.Join();
    }

    private void DoSplash()
    {
        Splash sp = new Splash();
        sp.ShowDialog();
    }

现在从启动窗体我尝试在许可证无效时退出应用程序,但它只退出启动并进入主窗体。

我尝试退出:

Enviroment.Exit();

Application.Exit();

Form1 f = new Form1();
this.Close();

但是没有一个关闭主要形式,只有关闭。

如何从启动表格类关闭整个应用程序?

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

是的,这些调用只会导致线程退出。您创建了一个新线程。在这种情况下,没有必要对它进行慷慨,Environment.Exit(1)将完成工作。 huff-and-puff版本是Control.BeginInvoke()以在主UI线程上运行代码。您需要对Form1的引用才能进行该调用。

Btw,你也会遇到SystemEvents的一个大问题,它们运行在错误的线程上,因为你创建的第一个窗口是在主UI线程以外的线程上创建的。当您锁定和解锁工作站时,最典型的事故是死锁。您需要等到UI线程上至少创建一个窗口。 Form1的OnLoad()方法覆盖或Load事件将是启动启动的好地方。或者只使用built-in support进行初始屏幕。

答案 2 :(得分:0)

您可以使用Application.Exit()Environment.Exit()

这些可能不是关闭你的应用程序的“最干净”的方式,但如果你只是在启动屏幕上b,它不太可能导致任何问题。

编辑:如果要在没有显示启动画面的情况下退出 ,如果许可证无效,则应在显示启动画面之前检查许可证,然后在此之前退出。

答案 3 :(得分:0)

除非绝对必要,否则不要在应用程序中引入多线程。
正如沃尔特爵士所说,

  

否则,你将进入痛苦的世界。

此外,任何UI交互(例如显示窗口或使用控件)都必须仅在主线程上完成。

如果您想在屏幕上显示表单时执行某些操作,请调用Show而不是模态ShowDialog,这样就不会阻止执行。

Application.Exit ()
如果你在主线程上调用它,那么

就会很好。

如果您希望在显示主表单之前显示启动画面,则不应在主表单InitializeComponent中执行此操作。相反,请更改Program.cs中的代码以首先显示启动屏幕:

Application.Run (new SplashScreenForm ());

SplashScreenForm中的某个地方(我不知道为什么你需要它,老实说)你应该检查许可证,如果没关系,关闭窗口,创建MainForm实例并调用它ShowDialog。如果它很糟糕 - 只需关闭窗口,因为它是最后一个窗体,应用程序就会停止。