我正在尝试在 JScript.NET 中使用 BeginRead() 进行异步 IO,但我无法让回调函数正常工作。
这是代码:
function readFileAsync() {
var fs : FileStream = new FileStream( 'test.txt', FileMode.Open, FileAccess.Read );
var result : IAsyncResult = fs.BeginRead( new byte[8], 0, 8, readFileCallback ), fs );
Thread.Sleep( Timeout.Infinite );
}
var readFileCallback = function( result : IAsyncResult ) : void {
print( 'ListenerCallback():' );
}
例外是强制转换失败:
Unhandled Exception: System.InvalidCastException: Unable to cast object of type 'Microsoft.JScript.Closure' to type 'System.AsyncCallback'.
at JScript 0.readFileAsync(Object this, VsaEngine vsa Engine)
at JScript 0.Global Code()
at JScript Main.Main(String[] )
我尝试对 AsyncCallback 和基本 MulticastDelegate 和 Delegate 类型进行显式转换,但无济于事。
委托应该是自动创建的,避免了显式创建新的 AsyncCallback 的需要,例如:
BeginRead( ... new AsyncDelegate( readFileCallback), object );
事实上,如果您尝试显式创建委托,编译器会发出错误。我一定在这里遗漏了一些东西。