【问题标题】:How to close Splashscreen?如何关闭启动画面?
【发布时间】:2011-07-05 06:26:24
【问题描述】:

我正在编写一个应用程序,它从实时引擎中获取数据并对其进行处理。该数据每 5 秒更新一次。

现在我想要一个闪屏,显示第一个数据获取周期的进度条。首次获取数据后,应用程序将打开显示所获取数据的主窗体。从这里开始,主窗体每 5 秒循环一次获取数据。

我已经把打开主窗体的代码放在了BackgroundWorker的ProgressChanged事件中。

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar1.Value = Math.Min(e.ProgressPercentage, 100);
        if (progressBar1.Value == 100)
        {                
            SplashScr.ActiveForm.Hide();
            frmMainForm frmMain= new frmMainForm();
            frmMain.WindowState = FormWindowState.Maximized;
            frmMain.Show();

        }
    }

有没有什么方法可以在主窗体加载后关闭启动画面,或者这个实现可以吗?

【问题讨论】:

  • 你的意思是不要隐藏它?
  • @Edwin 是的,而不是隐藏我想关闭它,但这会关闭应用程序。
  • 我想看看你的 Program.cs 文件

标签: c# .net winforms


【解决方案1】:

我将假设您的Program.Main 中包含以下内容:

Application.Run(new SplashForm());

如果是这样,这就是关闭启动表单时应用程序关闭的原因。试试这样的:

Application.Run(new MainForm());

然后从主窗体中显示您的启动窗体并从该端处理它。

HTH

【讨论】:

  • 感谢您的解决方案,但它引入了另一个问题。您会看到我正在使用 Backgroundworker 在初始屏幕代码中获取第一个周期的数据。然后将该数据填充到主窗体中,该主窗体要求每 5 秒进一步更新一次。如何让主窗体等到启动画面中的后台工作人员完成?
  • 尝试从主窗体执行所有操作(例如启动后台工作人员)。仅将飞溅用于显示。完成第一个循环后,飞溅可以关闭。
【解决方案2】:

两种可能性。

我假设您的初始屏幕是您的“主窗体”,它是您的应用程序创建的第一个窗体。然后,默认情况下,这将在您关闭应用程序时终止它。

所以,要么让你的启动画面成为一个可以随意打开和关闭的不同窗体,保持你的主窗体对 GUI 开放,要么你需要改变 close 方法的默认操作 - 通常这将是'关闭时最小化',但这与您的示例中的最小化具有相同的效果。

【讨论】:

    【解决方案3】:

    在我看来,我宁愿将启动画面包含在主窗体中。在初始化/加载方法期间应该显示启动画面 的主窗体,当加载所需的数据百分比时,可以将其关闭。所以backgroundworker应该由主窗体自己创建。

    所以后台工作者的进度改变方法只会关闭闪屏。这很好,因为主线程包含句柄

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 1970-01-01
      相关资源
      最近更新 更多