按钮打开Form2正在中止主线程(非预期)

时间:2013-04-07 00:22:11

标签: c# multithreading winforms graphics

确认问题:我的砖块图案按钮正在我的退出按钮中运行代码,原因不明

    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,整个程序就会终止,因为它正在运行另一个按钮的代码。

是否有另一种方法可以打开不会终止程序的form2?我尝试过不同类型的Show ShowDialog,在这种情况下,我会看到form2四分之一秒。然后整个程序终止。

这是我的form1代码的链接。 http://pastebin.com/FB19qd7e Form1设计师代码:http://pastebin.com/RS8VZT5U

编辑:输出显示此

  

类型的第一次机会异常   mscorlib.dll中发生'System.Threading.ThreadAbortException'       mscorlib.dll中出现“System.Threading.ThreadAbortException”类型的异常,但未在用户代码中处理

好的,我有三个按钮,一个退出,暂停和砖块(打开form2)。暂停按钮按预期工作,退出也是如此。但是,如果我单击砖块按钮,由于某种原因它会从退出按钮运行Thread.Abort。如果我注释掉退出按钮代码,那么砖块按钮的效果非常好。

1 个答案:

答案 0 :(得分:4)

您似乎已将设计器中Deactivate的{​​{1}}事件与Form1事件处理程序相关联。

exitToolStripMenuItem_Click

this.Deactivate += new System.EventHandler(this.exitToolStripMenuItem_Click); 的实例失去焦点时,会调用exitToolStripMenuItem_Click。当您显示Form1的新实例时,您现有的Form2实例将不再是活动表单,并且会触发对事件处理程序的调用,而事件处理程序将调用{{1} }。