2013-06-20 90 views
6

在我的程序開始時,我正在檢查是否可以啓動與COM6上的設備的連接。如果找不到設備,那麼我想顯示一個MessageBox然後完全結束程序。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顯示完後才找到完整的程序。謝謝。

SOLUTION:在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()); 

回答

5

由於這是在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()返回將退出過程。

+0

那很簡單。感謝您的幫助。 – VarnerBeast14

+0

這個答案應該添加更多關於爲什麼'Application.Exit()'沒有像'Jan Doerrenhaus'所解釋的那樣工作的解釋。 –

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()函數。

+0

這個工作對我原本想,但現在該程序不會當設備插入工作。我要玩這一點點,但謝謝你幫我解決了原來的問題。 – VarnerBeast14

6

Application.Exit告訴您的WinForms應用程序停止消息泵,因此退出程序。如果您在致電Application.Run之前調用它,則消息泵永遠不會首先啓動,因此它會凍結。

如果你想終止你的程序,不管它處於什麼狀態,使用Environment.Exit

+0

可能不是我在這裏所需要的,但是這對於我將來可能遇到的問題很有用。我一直在尋找那種「全部殺死」的代碼。 – VarnerBeast14

0

您可以將您的消息框代碼之後把Application.Exit()
catch
{
MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error")
Application.Exit();
}