2
我正在嘗試在JScript.NET中使用BeginRead()執行異步IO,但無法使回調函數正常工作。強制轉換委託類型在JScript.NET中失敗
下面是代碼:
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和委託類型沒有無濟於事。
代表都應該是自動生成,避免需要明確地創建一個新的AsyncCallback,如:
BeginRead(... new AsyncDelegate(readFileCallback), object);
而事實上,如果你嘗試創建委託明確,編譯器會發出錯誤。我必須在這裏錯過一些東西。