在加载表单内容时显示SplashScreen

时间:2013-06-20 20:29:08

标签: c#

我有SplashScreenMainForm

在我的MainForm_Load我有一个名为Connect();的方法。这种方法可以验证我的RFID设备与SerialPort的连接,并且需要几秒钟才能完成。

当它通过Connect()方法时,我想显示我的SplashScreen。我试过这个:

private void Main_Load(object sender, EventArgs e)
{
    Frm_Splash s = new Frm_Splash();
    s.Show();
    Connect();            
}

Connect();方法,使用MessageBox显示消息。 但是当SplashScreen结束时,它会自我消失并关闭MessageBox。

这是我的SplashScreen表单代码:

private void timer1_Tick(object sender, EventArgs e)
{
    if (pbLoad.Value < 100)
       {
          pbLoad.Value = pbLoad.Value + 1;
       }
    else
       {
          timer1.Enabled = false;
          this.Close();
       }
}

我知道它与this.Close();有关。我只是不知道如何解决它。

也许如果我使用this.Visible = false,但SplashScreen不会关闭,它仍然会处理,只是看不见......我认为有更好的选择。

2 个答案:

答案 0 :(得分:4)

我想您正在使用MessageBox.Show()打开邮箱... 而不是这个,请使用MessageBox.Show(this,"message");

我想现在发生的事情是你的留言箱父设置为启动画面,因为那是一个有焦点的对话框

答案 1 :(得分:1)

这是我的启动画面:

namespace MyNamespace
{
    public partial class frmSplashScreen : Form
    {
        private static frmSplashScreen splashScreen = null;
        private static Thread splashThread = null;
        private Double opacityInc = .03;
        private Double opacityDec = .1;
        private const Int32 iTimerInterval = 30;

        public frmSplashScreen()
        {
            InitializeComponent();

            Opacity = .0;
            timer1.Interval = iTimerInterval;
            timer1.Start();
        }

        private void frmSplashScreen_Load(Object sender, EventArgs e)
        {
            CenterToScreen();
        }

        public static void ShowSplashScreen()
        {
            if (splashScreen != null)
                return;
            splashThread = new Thread(new ThreadStart(frmSplashScreen.ShowForm));
            splashThread.IsBackground = true;
            splashThread.SetApartmentState(ApartmentState.STA);
            splashThread.Start();
        }

        private static void ShowForm()
        {
            splashScreen = new frmSplashScreen();
            Application.Run(splashScreen);
        }

        public static void CloseForm()
        {
            if (splashScreen != null)
                splashScreen.opacityInc = -splashScreen.opacityDec;
            splashThread = null;
            splashScreen = null;
        }

        private void timer1_Tick(Object sender, EventArgs e)
        {
            if (opacityInc > 0)
            {
                if (Opacity < 1)
                    Opacity += opacityInc;
            }
            else
            {
                if (Opacity > 0)
                    Opacity += opacityInc;
                else
                    Close();
            }
        }
    }
}

我通过在表单的构造函数中调用它来激活它,我希望它从中弹出:

frmSplashScreen.ShowSplashScreen();

然后在相同表格的Shown中关闭它:

frmSplashScreen.CloseForm();

注意:我之所以这样,是因为它使用了static个类,这有助于缓解所有权问题。