6

在我的程序开始时,我正在检查是否可以启动与 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 命令之后放置 aApplication.Exit();时,当未检测到设备时,MessageBox 会正确显示,但是当我关闭 MessageBox 时,Form1 仍然打开,但完全冻结,不允许我关闭它或单击任何按钮无论如何应该给我一个错误,因为设备没有连接。

我只是想在显示 MessageBox 后完全杀死程序。谢谢。

SOLUTION:使用return;MessageBox关闭后的方法后,程序在未插入设备时按我想要的方式退出。但是,当设备插入时,在测试后仍然存在读取问题。这是我以前没有发现的,但这是一个简单的修复。这是我的完整工作代码:

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

4 回答 4

7

Application.Exit告诉您的 WinForms 应用程序停止消息泵,从而退出程序。如果你在调用之前调用它Application.Run,消息泵从一开始就永远不会启动,所以它会冻结。

如果你想终止你的程序,不管它处于什么状态,使用Environment.Exit.

于 2013-06-20T19:41:09.757 回答
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()将退出该过程。

于 2013-06-20T19:30:08.920 回答
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语句后面没有代码,所以当布尔值为假时程序将关闭。

您可以将这种逻辑应用于代码的任何其他部分,而不仅仅是Main()函数。

于 2013-06-20T19:29:35.763 回答
0

您可以将 Application.Exit() 放在消息框代码之后
catch
{
MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error")
Application.Exit();
}

于 2013-09-23T08:49:46.907 回答