如果出现竞争条件,飞溅会停留在屏幕上

时间:2013-10-17 07:36:02

标签: c# .net multithreading winforms splash-screen

最近我修改了添加启动画面的应用程序。 我决定使用 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

我要尝试的是在创建 MainForm 之后移动 timer1.Enabled = true; ,但我想了解出了什么问题,因为我已经说过,这种竞争条件只发生在一些计算机上,所以如果我再也看不到它,我不能说我已经解决了它。

更新:我正在使用.net framework 4.0扩展

1 个答案:

答案 0 :(得分:0)

为什么你这么确定这是竞争条件? 您需要提供更多代码,以便不熟悉您的应用程序的人能够帮助您。何时调用过程,何时初始化初始化对话框,是否来自主窗体等。