在关闭之前,飞溅屏幕从未完全装载

时间:2012-05-04 19:32:52

标签: c# winforms splash

我正在为我的winform添加启动画面。我的启动画面只是另一种形式,其中,

this.Text = "";
this.ControlBox = False;

表单中的所有内容都是带有BackgroundImage和

的PictureBox
this.BackgroundImageLayout = BackgroundImageLayout.Center 

和一个ProgressBar,它递增值直到我的MainForm的初始化完成。

我使用Show而不是ShowDialog来打开Splash。好吧,ProgressBar可以正常工作,但PictureBox中的BackgroundImage似乎永远不会加载。我看到的只是带有ProgressBar的白色背景。

我在使用ProgressBar递增的方法中使用SplashScreen.Show(),并且在从MainForm的构造函数调用的方法中调用此方法。

我尝试在单独的线程中使用SplashScreen.Show,但这导致了同样的问题。非常感谢任何帮助,如果需要,我愿意提供更多信息。

解决:

当在自己的线程中启动它时必须使用ShowDialog,因为Show会在线程结束时关闭表单,但是使用ShowDialog,线程将保持运行直到表单关闭。感谢大家的帮助。

2 个答案:

答案 0 :(得分:3)

我的猜测是你阻止了消息队列,但没有看到更多的代码,我无法确定。

您可能想要查看此启动画面项目。我以前用过它。效果很好。

http://www.codeproject.com/Articles/5454/A-Pretty-Good-Splash-Screen-in-C

除此之外,该项目在单独的线程上运行启动画面以保持响应并防止消息队列阻塞。

答案 1 :(得分:1)

问题是您的启动画面正在主线程上显示,然后立即执行初始化应用程序的其他工作,并且永远无法绘制启动画面。

您需要在自己的线程上运行启动画面,以便能够干净地绘制它。见http://msdn.microsoft.com/en-us/library/aa446493.aspx