C# ShowDialog只是循环和创建新表单

C# ShowDialog只是循环和创建新表单,c#,winforms,.net-4.5,C#,Winforms,.net 4.5,一些信息: C# visual studio 2012中的Winforms项目 .Net framework 4.5 Windows 8.1操作系统x64 我有一只奇怪的虫子! 每当我使用: private void Main_Load(object sender, EventArgs e) { TestForm form = new TestForm(); form.ShowDialog(); } TestForm只是一个没有添加控件的标准表单 它将停止主线程,因为它应该

一些信息:

  • C#
  • visual studio 2012中的Winforms项目
  • .Net framework 4.5
  • Windows 8.1操作系统x64
我有一只奇怪的虫子! 每当我使用:

private void Main_Load(object sender, EventArgs e)
{
    TestForm form = new TestForm();
    form.ShowDialog();
}
TestForm只是一个没有添加控件的标准表单

它将停止主线程,因为它应该!但它不会等待输入,而是会在大约0.5秒的时间内生成一个新的“表单”。。。我采用了一个新的解决方案并进行了尝试,在那里它工作得很好,但在我目前正在开发的应用程序中,当它在表单内部或从表单中运行时,它就会这样做

在BackGroundWorker中放置相同的表单代码,则效果良好。 只有在我拥有的主UI表单中发生此错误。。 使用
Show()
正常工作,仅打开一个表单,但不使用对话框结果:-/

我不知道为什么,以前也从未见过这种情况???
请帮忙

编辑: 我按照罗伊·迪克图斯的建议做了,并设置了一个断点。 这是在我的启动器中,从该加载干线:

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()很好。

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

事情是这样的:

  • 计时器事件触发,并创建一个新的主窗体实例
  • 新的主窗体在
    main\u Load
    中显示一个模式对话框
  • 模式对话框运行消息泵
  • 计时器事件再次触发
  • 转到1

  • 您需要在
    timerHide\u Tick
    的最开始调用
    Stop()

    您的主表单名称不是TestForm?我的意思是,您没有在TestForm中创建TestForm?我敢打赌,如果您进行检查,一定会有人每隔0.5秒创建一个新的
    Main
    实例。什么是
    Main
    (另一种形式?)以及加载它的代码在哪里?您使用的是加载Main的启动屏幕吗?在
    表单.ShowDialog()
    行上放置一个断点,然后查看调用堆栈以找出问题的原因。您好,我有一个LauncherForm,它是第一个启动的东西,LauncherForm然后加载“Main”。请提供SSCCE,否则它永远不会发生谢谢您的回答,很简单,谢谢:)