在程序的最开始,我正在检查是否可以在COM6上启动与设备的连接。如果找不到设备,那么我想显示一个MessageBox,然后完全结束该程序。
这是我到目前为止在初始程序的Main()
函数中所拥有的:
try
{
reader = new Reader("COM6");
}
catch
{
MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error)
}
Application.EnableVisualStyles();
Application.SetCompatibleRenderingDefault(false);
Application.Run(new Form1());
当我尝试在MessageBox命令之后放置Application.Exit();
时,MessageBox在没有检测到设备时正确显示,但是当我关闭MessageBox时,Form1仍然打开,但是完全冻结,不会让我关闭它或者单击任何应该给我一个错误的按钮,因为设备没有连接。
我只是想在显示MessageBox之后完全杀掉程序。感谢。
解决方案:在MessageBox关闭后使用return;
方法后,当设备未插入时,程序就像我想要的那样退出。但是,当设备插入时,测试后仍然有读取问题。这是我以前没有发现的东西,但这是一个简单的修复。这是我完全正常工作的代码:
try
{
test = new Reader("COM6");
test.Dispose(); //Had to dispose so that I could connect later in the program. Simple fix.
}
catch
{
MessageBox.Show("No device was detected", MessageBoxButtons.OK, MessageBoxIcon.Error)
return;
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
答案 0 :(得分:6)
由于这是Main()
例程,只需返回:
try
{
reader = new Reader("COM6");
}
catch
{
MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error)
return; // Will exit the program
}
Application.EnableVisualStyles();
//... Other code here..
从Main()
返回将退出该过程。
答案 1 :(得分:6)
Application.Exit
告诉您的WinForms应用程序停止消息泵,因此退出程序。如果你在致电Application.Run
之前打电话给它,消息泵就不会首先启动,所以它会冻结。
如果您要终止程序,无论它处于什么状态,请使用Environment.Exit
。
答案 2 :(得分:2)
在顶部添加boolean
以确定操作是否已完成。
bool readerCompleted = false;
try
{
reader = new Reader("COM6");
readerCompleted = true;
}
catch
{
MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error)
}
if(readerCompleted)
{
Application.EnableVisualStyles();
Application.SetCompatibleRenderingDefault(false);
Application.Run(new Form1());
}
因为在if
语句之后没有代码,所以当布尔值为false时,程序将关闭。
您可以将此类逻辑应用于代码的任何其他部分,而不仅仅是Main()
函数。
答案 3 :(得分:0)
您可以在消息框代码之后放入Application.Exit()
catch
{
MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error")
Application.Exit();
}