【发布时间】:2015-12-27 07:07:39
【问题描述】:
启动画面的概念并没有让我觉得应该如此复杂,但是我在绘制整个启动画面时遇到了麻烦。
假设我有两个System.Windows.Forms.Forms:RealForm 和 SplashScreen。 RealForm 包含初始 GUI。在 RealForm 的加载过程中(即在Load 事件的事件处理程序中),RealForm 创建到数据库的连接,然后测试该连接。这可能需要几秒钟,所以在我做这一切之前,我试着抛出一个像这样的启动画面:
private void RealForm_Load(object sender, EventArgs e)
{
SplashScreen splash = new SplashScreen();
splash.Show();
loadAndCheckDatabase();
splash.Close();
}
问题在于,启动画面仅被部分绘制,因此它看起来并不像启动画面。知道为什么吗?我该怎么办?
对于奖励积分,有没有人知道在哪里可以找到对典型创建、使用和破坏形式中发生的所有事件系列的解释?上述问题可能是因为我不明白事情发生的顺序或在哪里挂钩表单事件。
更新 关闭,但不完全:寻找更多建议。这是当前代码:
private SplashScreen splash = new SplashScreen();
private void RealForm_Load(object sender, EventArgs e)
{
splash.Show();
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler
(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
this.Visible = false;
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
splash.Close();
this.Visible = true;
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
loadAndCheckDatabase();
}
不幸的是,this.Visible = false 没有做任何事情,因为它在我无法控制的代码中自动设置为 true。因此,为了解决这个问题,我将this.Visible = false 放入表单的Shown 事件的处理程序中。但是,正如您可能猜到的那样,您仍然可以在一瞬间看到表单......所以这并不是一个很好的解决方案。
当我仍在负载处理程序中时,有什么方法可以等待工作线程?
【问题讨论】:
标签: c# winforms splash-screen