Delphi 应用程序捆绑管理器在 2020-2039 端口范围内保留 20 个端口来启动其通信线程。当同一台计算机上启动第 21 个应用程序时,我想知道会发生什么情况。结果发现该应用程序只是挂起不响应,直到被杀死,我没有找到一种优雅地终止它的方法。
要重现此问题,请将 TTetheringManager 和 TTetheringProfile 放置在空窗体上,将配置文件连接到管理器,编译,在 IDE 外部启动应用程序 20 次,最后在 IDE 中启动第 21 个实例。
迄今为止,我已经发现以下内容:在 System.Tether.NetworkAdapter: procedure TTetheringNetworkManagerCommunicationThread.Execute 中,当 TCP 或 UDP 通信服务器无法启动时,会引发 ETetheringException.Create(SManagerNetworkCreation) 异常。到目前为止还不错。
此异常会在调试器中显示。当我继续并跟随以下代码时,应用程序最终在 System: function AcquireExceptionObject 中挂起,并且永远不会返回。
由于应用程序是在 Application.Run 期间引发的,因此我尝试通过以下方式捕获异常:
但这个方法没有起作用。你有什么建议可以捕获(或防止)这个异常吗?
要重现此问题,请将 TTetheringManager 和 TTetheringProfile 放置在空窗体上,将配置文件连接到管理器,编译,在 IDE 外部启动应用程序 20 次,最后在 IDE 中启动第 21 个实例。
迄今为止,我已经发现以下内容:在 System.Tether.NetworkAdapter: procedure TTetheringNetworkManagerCommunicationThread.Execute 中,当 TCP 或 UDP 通信服务器无法启动时,会引发 ETetheringException.Create(SManagerNetworkCreation) 异常。到目前为止还不错。
此异常会在调试器中显示。当我继续并跟随以下代码时,应用程序最终在 System: function AcquireExceptionObject 中挂起,并且永远不会返回。
由于应用程序是在 Application.Run 期间引发的,因此我尝试通过以下方式捕获异常:
try
Application.Run;
except
ShowMessage('Something went terribly wrong!');
end;
但这个方法没有起作用。你有什么建议可以捕获(或防止)这个异常吗?
OnException
事件添加一个事件处理程序,并在那里处理异常。 - David Heffernanprocedure TForm1.FormShow(Sender: TObject); begin try try TetheringAppProfile1.Manager := TetheringManager1; except ShowMessage('出了点问题:'); end; finally ShowMessage('最终成功了'); end; end;
- Lübbe Onken