【问题标题】:Exiting c# app from splash screen从初始屏幕退出 c# 应用程序
【发布时间】:2011-07-03 21:11:08
【问题描述】:

我正在为 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();

但是没有关闭主窗体,只有启动。

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

【问题讨论】:

  • 你为什么要在另一个线程中启动你的启动画面?尝试从主线程启动它,然后执行 Application.Exit()
  • 谢谢,但我怎样才能防止主窗体在退出前出现几毫秒?
  • 尝试在初始化组件之前放置启动画面和应用程序退出。

标签: c# .net exit splash-screen


【解决方案1】:

【讨论】:

    【解决方案2】:

    是的,这些调用只会导致线程退出。您创建了一个新线程。在这种情况下,没有什么好客气的,Environment.Exit(1) 将完成工作。吹嘘版本是 Control.BeginInvoke() 在主 UI 线程上运行代码。您需要对 Form1 的引用才能进行调用。

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

    【讨论】:

      【解决方案3】:

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

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

      编辑:如果您想退出而不显示初始屏幕完全如果许可证无效,您应该在显示初始屏幕之前检查许可证,然后在此之前退出。

      【讨论】:

        【解决方案4】:

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

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

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

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

        Application.Exit ()
        

        如果你在主线程上调用它会很好,你应该这样做。

        如果你想在主窗体显示之前显示启动画面,你不应该在主窗体InitializeComponent 中这样做。相反,更改Program.cs 中的代码以首先显示初始屏幕:

        Application.Run (new SplashScreenForm ());
        

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

        【讨论】:

          猜你喜欢
          • 2015-01-12
          • 1970-01-01
          • 1970-01-01
          • 2017-05-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-14
          相关资源
          最近更新 更多