Mega Code Archive

 
Categories / C# Tutorial / Thread
 

Asynchronous Writing, Asynchronous Reading

using System; using System.IO; using System.Threading; class MainClass {     static FileStream BinaryFile;     static byte[] ByteArray;     static IAsyncResult AsyncReadResultImplementation;     static IAsyncResult AsyncWriteResultImplementation;     static AsyncCallback ReadBytesCompleteCallback;     static AsyncCallback WriteBytesCompleteCallback;     public static void OnReadBytesComplete(IAsyncResult AsyncResult)     {         int BytesRead;         BytesRead = BinaryFile.EndRead(AsyncResult);         Console.WriteLine(BytesRead);         for (int i = 0; i < 256; i++)         {             if (ByteArray[i] != (byte)i)             {                 Console.WriteLine("Read test failed for byte at offset {0}.", i);             }         }     }     public static void OnWriteBytesComplete(IAsyncResult AsyncResult)     {         BinaryFile.EndWrite(AsyncResult);     }     public static void Main()     {         AsyncReadResultImplementation = null;         BinaryFile = new FileStream("test.dat", FileMode.Create, FileAccess.ReadWrite);         ByteArray = new byte[256];         ReadBytesCompleteCallback = new AsyncCallback(OnReadBytesComplete);         WriteBytesCompleteCallback = new AsyncCallback(OnWriteBytesComplete);         for (int i = 0; i < 256; i++)             ByteArray[i] = (byte)i;         AsyncWriteResultImplementation = BinaryFile.BeginWrite(ByteArray, 0, 256, WriteBytesCompleteCallback, null);         WaitHandle WaitOnWriteIO = AsyncWriteResultImplementation.AsyncWaitHandle;         WaitOnWriteIO.WaitOne();         BinaryFile.Seek(0, SeekOrigin.Begin);         AsyncReadResultImplementation = BinaryFile.BeginRead(ByteArray, 0, 256, ReadBytesCompleteCallback, null);         WaitHandle WaitOnReadIO = AsyncReadResultImplementation.AsyncWaitHandle;         WaitOnReadIO.WaitOne();     } }