【发布时间】:2016-10-30 18:31:43
【问题描述】:
我正在为SimTools 编写一个访问NoLimitsRollercoasterSimulator 遥测数据的DLL。 TcpClient 是在加载 DLL 时创建的
Dim tcpClientNLS As New TcpClient()
然后,DLL 中的所有不同子例程都可以访问tcpClientNLS。当我在其中一个子例程(例如Public Sub GameStart())中创建 TcpClient 时,客户端只能在此子例程(GameStart)中访问。问题是当 NoLimits 模拟结束时,DLL-subsoutine GameStop 必须关闭 TcpClient,否则 NoLimits 模拟会挂起。
因为tcpClientNLS.Close() 调用不仅关闭了连接而且还释放了tcpClient,所以它不再可以访问了。
因此,下次 NoLimits 模拟开始并且DLL-GameStart 例程尝试将 TcpClient 与tcpClientNLS.Connect("127.0.0.1", 15151) 连接时,它会引发异常。
我尝试了几种不同的选择 - 到目前为止都没有运气。
- 是否可以在子例程中创建新的 TcpClient(例如
DLL-GameStart) 并在另一个子程序中访问它(例如DLL-GameStop)? - 我也可以在
DLL-Process_Telemetry每次读取遥测数据时的子程序 从 NoLimits Simulation 并在之后立即关闭 TcpClient (每秒 100 次)在同一DLL-Process_Telemetry子例程中。但是我 你猜这只是消耗大量的处理时间? - 有吗 另一种关闭连接并重用 TcpClient 的方法?
提前感谢您的帮助!
【问题讨论】: