ShowDialog只是循环和创建新表单

时间:2013-12-23 12:46:11

标签: c# winforms .net-4.5

一些信息:

  • C#
  • 2012年Visual Studio中的Winforms项目
  • .Net framework 4.5
  • Windows 8.1 OS x64

我有最奇怪的错误! 每当我使用时:

private void Main_Load(object sender, EventArgs e)
{
    TestForm form = new TestForm();
    form.ShowDialog();
}

TestForm只是一个没有添加控件的标准形式。

它会停止主线程,因为它应该!但不是等待输入,它将产生一个新的“形式”0.5秒aprox ...我采取了一个新的解决方案并尝试,并在那里工作正常,但在我正在进行的应用程序中,它做到了这一点它在内部或从这种形式运行。

将相同的表单代码放在BackGroundWorker中,然后它可以正常工作。 只有在我有的主UI表单内,发生此错误.. 使用Show()正常工作,只打开1个表单,但不能使用对话框结果: - /

我不知道为什么,之前从未见过这个? 请帮忙。

编辑: 我按照Roy Dictus的建议做了,并设置了一个断点。 这是在我的LauncherFrom中加载Main:

private void timerHide_Tick(object sender, EventArgs e)
        {
            this.Hide();
            // Open main form IF true else open hidden
            var f = new a.Views.Main();
            if (Properties.Settings.Default.StartHidden)
            {
                f.Opacity = 0;
                f.Show();
                f.Hide();
                f.Opacity = 1;
            }
            else
            {
                f.Show();
            }

            // Stop timer
            timerHide.Stop();
        }

看起来timerHide.Stop();从未被调用过 我之前已经使用了很多次,而且还有一些ShowDialog()次调用可以正常工作..

那为什么这只对ShowDialog();的一些不起作用? 如果我从TestForm.ShowDialog();移除Main_Load(),则会调用timerHide.Stop();就好了。

1 个答案:

答案 0 :(得分:0)

您的代码永远不会到达tiemrHide.Stop()。那是因为你显示了一个运行自己的消息泵的模态对话框。所以你的计时器一次又一次地开火。

这是怎么回事:

  1. 计时器事件timerHide_Tick将触发,并创建一个新的主表单实例。
  2. 新的主窗体在Main_Load
  3. 中显示模式对话框
  4. 模态对话框运行消息泵。
  5. 计时器事件再次触发。
  6. 转到1。
  7. 您需要在Stop()开始时致电timerHide_Tick