MessageBox关闭后结束程序

时间:2013-06-20 19:26:31

标签: c# winforms messagebox

在程序的最开始,我正在检查是否可以在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());

4 个答案:

答案 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();
}