【发布时间】:2009-08-03 14:57:28
【问题描述】:
请看下面的代码:
var splashForm = new SplashForm();
m_Thread = new Thread( () => System.Windows.Forms.Application.Run( splashForm ) )
m_Thread.Start();
// Do some initialization
// ...
// the following method just invokes `Close()` on the right thread
splashForm.Shutdown();
// Loop until the thread is no longer alive
// ...
System.Windows.Forms.Application.Run( mainForm );
看起来一切正常:首先我看到启动画面,然后主窗体启动。但不知何故,我遇到了奇怪的错误,例如:图形元素(无尽的 ProgressBar)没有正确显示。
编辑:我有两个进度条,一个在启动画面上,一个在主窗体上。它们在无尽模式下都表现出相同的(错误)行为:没有进展,只有纯背景。/EDIT
在我看来,这是由于在不同线程上调用了Application.Run()。可以通过在启动闪屏之前调用 mainForm 的任何函数/属性来消除此错误 - 例如,
mainForm.Text = mainForm.Text;
任何人都可以确认此代码是否会导致问题 - 或者它应该表现良好,我必须在其他地方查找错误?
我已经寻找了启动画面的实现,并且我知道它可以以不同的方式完成。但我有兴趣了解这种实现及其可能的问题。谢谢!
【问题讨论】:
标签: c# multithreading