最近我修改了一个添加启动画面的应用程序。我决定使用WindowsFormsApplicationBase所以我把所有繁重的初始化逻辑都放在里面
protected override void OnCreateMainForm()
在某些计算机上,应用程序在第一次执行之后的所有连续执行都会导致启动屏幕永远可见,并且不显示主窗体。我在互联网上搜索以找到解决方案,但似乎在修复了一些错误后,WindowsFormsApplicationBase目前很受信任。所以我做了有根据的猜测,导致我的飞溅留在屏幕上的竞争条件与我的应用程序的特定内容有关。在初始化期间,我使用以下方法在启动画面上写了一些进度标志:
public void showCurrentLoadStep(string message)
{
if (this.mySplash.IsHandleCreated)
{
this.mySplash.Invoke(new EventHandler(delegate
{
mySplash.label1.Text = message;
}));
}
}
但我认为这没关系。
除了MainForm构造函数中完成的最后一个操作是
timer1.Enabled = true;
我验证了当飞溅仍然存在并且不显示MainForm时也会执行计时器回调。
我要尝试的是移动timer1.Enabled = true; 在创建MainForm之后,但我想了解出了什么问题,因为正如我已经说过的,这种竞争条件只发生在某些计算机上,所以如果我不再看到它,我不能说我已经解决了它。
更新:我正在使用 .net framework 4.0 扩展