2016-06-30 3 views
0

ここで何か間違っていたと申し訳ありませんが、これはこのウェブサイトの最初の質問です。BeginConnectで例外がキャッチされたときにアプリケーションを終了します

BeginConnectがエラー(主にSocketException)をスローすると、アプリケーション(プロセス)を完全に終了しようとしています。

マイコード:

try 
{ 
    Socket.BeginConnect(new IPEndPoint(IPAddress.Parse(ip), port), new AsyncCallback(ConnectionCallBack), Socket); 
} 
catch (System.Exception ex) 
{ 
    OnError(new ErrorEventArgs(ex)); 
} 

のErrorEvent火災、と私は自分のアプリケーションを終了しようとする場所です:

if (e.Ex is SocketException) 
{ 
    MessageBox.Show(LanguageManager.GetText("Erreur1")); 
    client.Dispose(); 
    Application.Exit(); 
} 

しかし、その後、デバッグモードはまだか...実行されています私はデバッグモードなしでそれを試しても、私はまだタスクマネージャーにプロセスを見つける。

ありがとうございます!

+0

タイムアウトでBeginConnectを拡張してみません:2つのソリューションのhttp://stackoverflow.com/questions/1062035/how-to-configure-socket-connect-timeout –

答えて

0

私の問題は、メインプロセスが終了する前に子スレッドがシャットダウンするのを待っていることが原因であると思われます。 Close() apiを使用してソケット接続を閉じて、スレッドを正常にシャットダウンし、メインプロセスが終了しているかどうかを確認してください。

ドキュメント:Socket.Close()

また、あなたがSystem.Environment.Exit(1)を行うことができますが、それはアプリケーションを殺す残忍な方法です。あなたは一般的にそれを行う必要はありませんが、それを使用する必要がある場合。

https://msdn.microsoft.com/en-us/library/system.environment.exit(v=vs.110).aspx

Environment.Exitメソッド(Int32)を

.NETフレームワーク(現在のバージョン)その他のバージョンこの 処理を終了し、オペレーティングシステムに終了コードを返します。

例:

enum ExitCode : int { 
    Success = 0, 
    ForceTermination = 1, 
    SocketException = 2 
} 

System.Environment.Exit(ExitCode.ForceTerminate); 
+0

なし問題が発生しました:プロセスがまだそこにあります:/サーバー接続なしでアプリケーションを試すと、赤い "X"ボタンを押すとプロセスが終了するので、非同期コールバック以外のスレッドは使用されません。 – Haytam

+0

:/これらの人がそれを解決したように見える迅速な研究をしました。 http://stackoverflow.com/questions/554408/why-would-application-exit-fail-to-work私はそれが笑に行く方法を教えてください –

関連する問題