2015-06-10 129 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();那裏和程序終止,但由於某些原因,代碼不起作用 –