2013-04-07 34 views
1

确认问题:我的砖模式按钮运行在我的退出按钮的代码为一些未知的原因按钮打开窗体2被中止主线程(不打算)

private void brickToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     //if (f2 != null) return; 
     f2 = new Form2(); 
     f2.ShowDialog(); 
    } 

    private void exitToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     myThread.Abort(); 
     Close(); 
    } 

我创建这个砖断路器游戏有一个用于主窗口(包括桨和砖)的螺纹和用于球运动的螺纹。在我的程序中,如果我点击按钮打开form2,整个程序就会终止,因为它正在运行另一个按钮的代码。

有没有打开,将不会终止我的程序窗口2的另一种方式?我已经尝试过不同类型的显示,如ShowDialog,在这种情况下,我看到form2为四分之一秒。然后整个程序终止。

这是我的Form 1代码的链接。 http://pastebin.com/FB19qd7e Form 1设计代码:http://pastebin.com/RS8VZT5U

编辑:输出显示类型 “System.Threading.ThreadAbortException”这

第一次机会异常出现在mscorlib.dll 型系统的”异常。 Threading.ThreadAbortException” mscorlib.dll中发生,但在用户代码中没有处理

好吧,我有三个按钮,退出,暂停和砖(这将打开窗口2)。暂停按钮按预期工作,退出也一样。但是,如果我点击bricks按钮,由于某种原因它会从退出按钮运行Thread.Abort。如果我将退出按钮代码注释掉,那么砖块按钮就可以很好地工作。

+0

你是否启用了“打破所有例外”功能?此外,您不建议*在哪里添加该代码,这会对程序的行为产生重大影响。 – 2013-04-07 00:23:59

+0

我只是运行程序正常。它会在某处的某个属性中启用吗?至于我在哪里添加代码,我只是想要一个按钮来创建一个新表单。而且我可以创建一个新项目并让它工作来创建另一个表单,但是在这个特定的项目中,它不起作用。 – krikara 2013-04-07 00:27:55

+0

在vs中按ctrl-alt-e,异常对话框将打开。选中cli异常旁边的框,调试器将打破任何异常,这可能会帮助您识别问题。 – 2013-04-07 00:30:41

回答

4

看起来您已将Deactivate事件设计中的Form1事件连接到exitToolStripMenuItem_Click事件处理程序。

this.Deactivate += new System.EventHandler(this.exitToolStripMenuItem_Click); 

,将调用exitToolStripMenuItem_Click当你的Form1失去实例重点。当你表现出的Form2一个新实例现有的Form1实例将不再是活性形式,这将触发调用事件处理这反过来将使得呼叫Abort

+0

有趣......我从来没有编辑设计器文件,我可以发誓我没有碰过任何退出按钮属性,但我可能做到了。谢谢 – krikara 2013-04-07 14:57:38