J'essaye de faire des E/S asynchrones en utilisant BeginRead() dans JScript.NET, mais je n'arrive pas à faire fonctionner correctement la fonction de rappel.La génération de type délégué échoue dans JScript.NET
Voici le code:
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():');
}
L'exception est un échec coulé:
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[])
J'ai essayé de faire un casting explicite à la fois à AsyncCallback et à la base des types MulticastDelegate et délégué à pas profiter.
Les délégués sont censés être créés automatiquement, ce qui évite la nécessité de créer une nouvelle AsyncCallback explicitement, par exemple:
BeginRead(... new AsyncDelegate(readFileCallback), object);
Et en fait, si vous essayez de créer le délégué du compilateur émet explicitement une erreur. Je dois manquer quelque chose ici.