按钮打开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按钮就可以正常工作。
看起来您已经将设计器中Form1
的Deactivate
事件连接到exitToolStripMenuItem_Click
事件处理程序。
this.Deactivate += new System.EventHandler(this.exitToolStripMenuItem_Click);
当Form1
的实例失去焦点时,将调用exitToolStripMenuItem_Click
。当您显示Form2
的新实例时,您的Form1
的现有实例将不再是活动形式,这将触发对事件处理程序的调用,而事件处理程序又将调用Abort
。