在BeginConnect上捕获异常时退出应用程序

时间:2016-06-30 00:41:15

标签: c# asynchronous exit

如果我在这里做错了,我很抱歉,这是我在本网站的第一个问题。

当BeginConnect抛出错误(主要是SocketException)时,我试图完全退出我的应用程序(进程)。

我的代码现在:

extension_dir = "/Applications/MAMP/bin/php/php5.6.10/lib/php/extensions/no-debug-non-zts-20131226/"

ErrorEvent触发,这是我尝试退出应用程序的地方:

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

但是,然后,调试模式仍在运行..或者如果我在没有调试模式的情况下尝试它,我发现任务管理器中的进程仍然存在。

感谢您的帮助!

1 个答案:

答案 0 :(得分: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 Framework(当前版本)其他版本终止此操作   处理并将退出代码返回给操作系统。

示例:

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

System.Environment.Exit(ExitCode.ForceTerminate);