Home  |  Delphi .net Home  |  System.IO.FileStream  |  EndWrite Method
EndWrite  
Method  
Wait for an asynchronous write to complete
FileStream Class
System.IO NameSpace
CF1.  Procedure EndWrite ( AsyncResult : IAsyncResult; ) ;
CF : Methods with this mark are Compact Framework Compatible
Description
Normally, you would allow the callback method of an asynchronous write to be called. If you need to wait until this happens in the main thread of operation, then call EndWrite.
 
The AsynResult parameter should be supplied with the value returned by the BeginWrite you want to wait for.
Notes
The callback method will be called asynchronously to the main thread - see the example for the effect of this.
Microsoft MSDN Links
System.IO
System.IO.FileStream
 
 
A simple example
program Project1;
{$APPTYPE CONSOLE}

uses
  System.IO,
  System.Runtime.Remoting.Messaging;

var
  Stream    : System.IO.FileStream;
  ByteArray : Array of Byte;
  ByteAsInt : Integer;
  AsyncRes  : IAsyncResult;
  Index     : Integer;

procedure WriteDone(AsyncResult : IAsyncResult);
var
  Index : Integer;
begin
  Console.WriteLine('Write is finished :');
  Console.WriteLine;
end;

begin
  // Create our File Stream
  Stream := System.IO.FileStream.Create('C:\DelphiBasics.txt', FileMode.Create);

  // Create our byte array
  SetLength(ByteArray, 10);

  // And fill it
  ByteArray[0] := 65; // Ord(65) = 'A'
  ByteArray[1] := 66;
  ByteArray[2] := 67;
  ByteArray[3] := 68;
  ByteArray[4] := 69;
  ByteArray[5] := 70;
  ByteArray[6] := 71;
  ByteArray[7] := 72;
  ByteArray[8] := 73;
  ByteArray[9] := 74;

  // Write to the stream from the array asynchronously
  AsyncRes := Stream.BeginWrite(ByteArray, 0, 10, WriteDone, TObject.Create);

  // Wait for the read to end
  Console.WriteLine;
  Console.WriteLine('Waiting in main thread for write to complete');
  Console.WriteLine;

  Stream.EndWrite(AsyncRes);

  // Display the stream contents
  Stream.Seek(0, SeekOrigin.Begin);
  ByteAsInt := Stream.ReadByte;

  while ByteAsInt > 0 do
  begin
    Console.WriteLine(Char(ByteAsInt));
    ByteAsInt := Stream.ReadByte;
  end;

  // Close the file stream
  Stream.Close;

  Console.Readline;
end.
Show full unit code
  
  Waiting in main thread for write to complete
  
  A
  B
  C
  D
  E
  F
  G
  Write is finished :
  
  H
  I
  J
 
 
Delphi Programming © Neil Moffatt All rights reserved.  |  Contact the author