private static void AsyncReadFile() {
//open input file
try {
_infile = new FileStream(_inputfile, FileMode.Open, FileAccess.Read, FileShare.Read, CopyBufferSize, FileFlagNoBuffering);
} catch {
throw;
}
//if we have data read it
while (_totalbytesread < _infilesize) {
_bytesRead1 = _infile.Read(Buffer1, 0, CopyBufferSize);
Monitor.Enter(Locker1);
try {
while (_buffer2Dirty) Monitor.Wait(Locker1);
Buffer.BlockCopy(Buffer1, 0, Buffer2, 0, _bytesRead1);
_buffer2Dirty = true;
_bytesRead2 = _bytesRead1;
_totalbytesread = _totalbytesread + _bytesRead1;
Monitor.PulseAll(Locker1);
} catch {
_readfailed = true;
throw;
} finally { Monitor.Exit(Locker1); }
}
//clean up open handle
_infile.Close();
_infile.Dispose();
}