如何关闭Splashscreen?

时间:2011-07-05 06:26:24

标签: c# .net winforms

我正在编写一个应用程序,它从实时引擎中获取数据并对其进行处理。此数据每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();

        }
    }

主表单加载后是否有任何关闭Splashscreen的方法或者这个实现是否正确?

3 个答案:

答案 0 :(得分:4)

我将假设在你的Program.Main中你有以下几点:

Application.Run(new SplashForm());

如果是这样,那么关闭启动表单时应用程序关闭的原因就在于此。尝试这样的事情:

Application.Run(new MainForm());

然后从主窗体中显示您的初始形式并从此处理它。

HTH

答案 1 :(得分:0)

两种可能性。

我认为你的启动画面是你的“主要形式”,这是你的应用程序创建的第一个。默认情况下,这将在您关闭它时终止您的应用程序。

因此,要么使您的启动画面成为可以随意打开和关闭的不同形式,保持主窗体为GUI打开,或者您需要更改关闭方法的默认操作 - 通常这将是'最小化',但这与你的例子中的最小化具有相同的效果。

答案 2 :(得分:0)

在我看来,我宁愿在主窗体中包含启动画面。应在init / load方法期间显示启动屏幕 主窗体的加载,当加载所需的数据%时,可以关闭它。所以backgroundworker应该由主表单本身创建。

因此后台工作者的进度改变方法只会关闭启动画面。这很好,因为主线程包含句柄