我正在编写SimTools的DLL,用于访问NoLimitsRollercoasterSimulator的遥测数据。在使用
加载DLL期间创建TcpClienttcpClientNLS
然后可以通过DLL中的所有不同子例程访问Public Sub GameStart()
。当我在其中一个子例程(例如GameStart
)中创建TcpClient时,只能在此子例程(GameStop
)中访问客户端。问题是当NoLimits模拟结束时,DLL-subsoutine tcpClientNLS.Close()
必须关闭TcpClient,否则NoLimits模拟会挂起。
因为DLL-GameStart
调用不仅关闭了connetcion而且还释放了tcpClient,因此它不再可访问。
因此,下次NoLimits模拟开始并且tcpClientNLS.Connect("127.0.0.1", 15151)
例程尝试将TcpClient与DLL-GameStart
连接时,它会抛出异常。
我尝试了几种不同的选择 - 到目前为止没有运气。
DLL-GameStop
)并在另一个子例程中访问它(例如
DLL-Process_Telemetry
)?DLL-Process_Telemetry
子程序
从NoLimits Simulation开始,然后关闭TcpClient
({100}每秒)在同一个import {Directive,HostListener} from '@angular/core';
@Directive({
selector: '[blockNonNumber]'
})
export class blockNonNumberDirective {
@HostListener('keydown', ['$event']) onKeyDown(event: any) {
let keyCode = [8, 9, 37, 39, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 110];
if ( keyCode.indexOf(event.which) === -1) event.preventDefault();
}
}
子程序中。但是我
猜猜这只消耗了大量的处理时间?提前感谢您的帮助!
答案 0 :(得分:1)
是否可以在子例程(例如DLL-GameStart)中创建新的TcpClient并在另一个子例程(例如DLL-GameStop)中访问它?
无法在方法/子例程中创建新变量,然后从外部访问它,
但是 您可以随时重新定位全局tcpClientNLS
变量,例如在GameStart()
方法中:
Dim tcpClientNLS As TcpClient
Public Sub GameStart()
tcpClientNLS = New TcpClient()
tcpClientNLS.Connect("127.0.0.1", 15151)
...
End Sub
每当我从NoLimits Simulation读取遥测数据并在同一DLL-Process_Telemetry子程序中(100×每秒)之后立即关闭TcpClient时,我也可以在DLL-Process_Telemetry子程序中创建一个新的TcpClient。但我想这只会耗费大量的处理时间?
这样做可能会减慢事情的速度,是的。
是否有另一种方法可以关闭连接并重用TcpClient?
您也可以在tcpClientNLS.Close()
致电后立即重新验证它(如上所示)。