0

我目前正在向我的 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,线程将保持运行直到窗体关闭。感谢大家的帮助。

4

2 回答 2

3

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

您可能想看看这个闪屏项目。我以前用过。效果很好。

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

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

于 2012-05-04T19:36:22.327 回答
1

问题是您的初始屏幕显示在主线程上,然后立即继续执行初始化应用程序的其他工作,并且永远没有机会绘制初始屏幕。

您需要在自己的线程上运行启动画面以使其清晰地绘制。请参阅http://msdn.microsoft.com/en-us/library/aa446493.aspx

于 2012-05-04T19:36:59.183 回答