按钮打开Form2中止主线程(不是有意的)

本文关键字:线程 Form2 按钮 | 更新日期: 2023-09-27 18:07:44

确认问题:由于某些未知原因,我的砖块图案按钮正在运行退出按钮中的代码

    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的时间是1/4秒。然后整个程序终止。

这是一个链接到我的form1代码。http://pastebin.com/FB19qd7eForm1设计代码:http://pastebin.com/RS8VZT5U

编辑:输出显示如下

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

好的,我有三个按钮,一个出口,暂停和砖块(打开form2)。暂停按钮按预期工作,退出按钮也是如此。然而,如果我点击砖块按钮,出于某种原因,它运行线程。从退出按钮中止。如果我注释掉退出按钮代码,那么bricks按钮就可以正常工作。

按钮打开Form2中止主线程(不是有意的)

看起来您已经将设计器中Form1Deactivate事件连接到exitToolStripMenuItem_Click事件处理程序。

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

Form1的实例失去焦点时,将调用exitToolStripMenuItem_Click。当您显示Form2的新实例时,您的Form1的现有实例将不再是活动形式,这将触发对事件处理程序的调用,而事件处理程序又将调用Abort