2013-06-20 52 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()); 

私はメッセージボックスコマンドの後Application.Exit();を入れしようとすると、メッセージボックスには何のデバイスが検出されない場合、正しく表示しますが、I MessageBoxを閉じても、Form1はまだ開いていますが、完全にフリーズしていますので、閉じても、デバイスが接続されていないためにエラーが表示されるボタンをクリックしても問題ありません。

私は、MessageBoxが表示された後にプログラムを完全に終了させようとしています。ありがとう。

SOLUTION:メッセージボックスは、プログラムは、デバイスがそれを接続していなかったときに私が望んでいただけのように終了し閉じた後return;方法を使用した後。しかし、デバイスがプラグインされたときには、それでもテストの後に読み込みの問題がありました。これは私が以前に発見していなかったものでしたが、簡単な修正でした。ここで私の完全に動作するコードです:

答えて

5

これはMain()ルーチンであるので、単に返す: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.. 

をプロセスを終了します。

+0

それは簡単でした。しかし、助けてくれてありがとう。 – VarnerBeast14

+0

この回答は 'Jan Doerrenhaus'によって説明された' Application.Exit() 'がうまくいかなかった理由の説明を追加する必要があります。 –

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()関数だけでなく、コードの他のセクションにも適用できます。

+0

は、これは私が最初に何を望むかのために働いたが、今のプログラムは文句を言わないデバイスが接続されたときに動作します。私はプレーするつもりですこれはちょっとしたことですが、元の問題を解決できるように助けてくれてありがとう。 – VarnerBeast14

6

Application.Exitは、WinFormsアプリケーションにメッセージポンプを停止し、プログラムを終了するように指示します。 Application.Runに電話する前に呼び出すと、メッセージポンプが最初に起動することはありません。そのため、メッセージはフリーズします。

どのような状態であってもプログラムを終了したい場合は、Environment.Exitを使用してください。

+0

おそらく私がここに必要なものではないかもしれませんが、私はその "kill-all"なコードを探していました。 – VarnerBeast14

0

あなたのメッセージボックスのコードの後に​​Application.Exitを()に置くことができます
catch
{
MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error")
Application.Exit();
}

関連する問題