2015-06-10 96 views
1

我正在编写一个程序,它使用char值来确定要写入哪个字符串。目前,我有(既cPlant和sSql宣布更早)C#应用程序不会关闭

if (cPlant == 'B') 
{ 
    sSql = "somestring1"; 
} 
else if (cPlant == 'D') 
{ 
    sSql = "somestring2"; 
} 
else 
{ 
    MessageBox.Show("Error!"); 
    Application.Exit(); 
    MessageBox.Show("Shouldn't see this!"); 
} 

不应该Application.Exit();杀程序?

+0

我们就需要看到更多的代码,在此之前,使我们自己的准确测定。你有没有尝试在这个'if'块之前打印'cPlant'的值,以确保值正确并且代码路径实际上正在执行? –

+3

从[文档](https://msdn.microsoft.com/en-us/library/ms157894(v = vs.110).aspx):_“此方法不一定强制应用程序退出。”_您可以尝试[Environment.Exit](https://msdn.microsoft.com/en-us/library/system.environment.exit(v = vs.110).aspx)。或者修复你的程序,使它优雅地结束,而不必杀死它。 –

+1

您可以在此场景中使用“例外”,并且您可以向用户提供一条消息,例如“字符不正确”。该程序将自动关闭。 –

回答

0
Application.Exit(); 

所有这一切确实是发布消息的消息泵请求应用程序关闭(很像用户点击关闭图标)。

调用程序返回后,所有正常的退出代码(例如表单的实现OnClosing)都会运行,以便消息泵可以处理未完成的消息。

当然

东西在所有的代码运行可能取消封闭......

+0

请注意,在WinForms中做任何不平凡的事情,你需要知道它建立的底层(Win32)机制。因此谈论消息泵。 – Richard

-2

你还可以尝试:

this.close(); 
+1

如果这是WinForms,并且上面的代码在儿童窗体中运行,该怎么办?这只会关闭子窗体,而不是结束应用程序。这应该是一个评论。 –

+1

控制台应用程序没有实例化任何有'this'的东西。 – Sinatr

+0

我有一个“退出”按钮的文件菜单的选项。我使用this.Close();那里和程序终止,但由于某些原因,代码不起作用 –