Contains event arguments and it is passed to the PdfCompressorEngine.WriteAsyncCompleted event whenever a PdfCompressorEngine.WriteAsync operation finishes.
public class PdfCompressorWriteAsyncCompletedEventArgs : AsyncCompletedEventArgs
You do not create this class. Leadtools creates an instance of this class, populates it and sends it whenever it fires the PdfCompressorEngine.WriteAsyncCompleted event.
Note that the PdfCompressorEngine.WriteAsyncCompleted event is received regardless of whether the PdfCompressorEngine.WriteAsync operation succeeded or not.
The operation succeeded if AsyncCompletedEventArgs.Cancelled
is false and AsyncCompletedEventArgs.Error
is null. If the operation failed due to an exception, the AsyncCompletedEventArgs.Error
contains the exception details.
You can test what happens when there is an exception by trying to write to an existing output file that cannot be modified. For example, make the output file read-only.
Another important property from the base class is AsyncCompletedEventArgs.UserState
. It contains the userState parameter passed to the PdfCompressorEngine.WriteAsync method.
Refer to the Microsoft documentation for AsyncCompletedEventArgs to learn more details about the properties mentioned here, and for the other properties inherited by PdfCompressorWriteAsyncCompletedEventArgs from the base classes.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.PdfCompressor;
/* This example shows a how to use the PdfCompressorEngine::WriteAsync method to create a Pdf asynchronously.
* The output file is very simple and contains a single image.
* We will store the RasterImage and RasterImage and PdfCompressorEngine in a user class so we can dispose them
* when WriteAsync finishes and fires the WriteAsyncCompleted event.
*/
/* Class used to store the RasterImage and PdfCompressorEngine objects */
private class WriteAsyncDataStringObject
{
public RasterImage image; /* image to write as Pdf */
public PdfCompressorEngine pdfCompressor; /* compressor object that will do the save */
};
/* Handler for the WriteAsyncCompleted event */
private static void OnWriteAsyncCompletedStringObject(object sender, PdfCompressorWriteAsyncCompletedEventArgs args)
{
if (args.Error != null)
Debug.WriteLine($"WriteAsyncThread: The save operation failed with exception = {args.Error.Message}.");
else if (args.Cancelled)
Debug.WriteLine($"WriteAsyncThread: The save operation was cancelled!");
else
Debug.WriteLine($"WriteAsyncThread: The save operation succeeded! Saved as {args.FileName}");
/* clean up the data used by WriteAsync operation */
WriteAsyncDataStringObject data = (WriteAsyncDataStringObject)args.UserState;
data.pdfCompressor.Dispose();
data.image.Dispose();
if (args.Stream != null)
args.Stream.Close();
}
/* Main function calling PdfCompressorEngine.WriteAsync. Note that WriteAsync will finish after this function returns */
public void TestPdfCompressorSaveAsyncStringObject()
{
string srcFile = Path.Combine(LEAD_VARS.ImagesDir, "glare.jpg");
string dstFile = Path.Combine(LEAD_VARS.ImagesDir, "out.pdf");
WriteAsyncDataStringObject data = new WriteAsyncDataStringObject();
using (RasterCodecs codecs = new RasterCodecs())
data.image = codecs.Load(srcFile);
data.pdfCompressor = new PdfCompressorEngine();
data.pdfCompressor.Insert(data.image);
/* Register OnWriteAsyncCompleted as a handler for the WriteAsyncCompleted event */
data.pdfCompressor.WriteAsyncCompleted += OnWriteAsyncCompletedStringObject;
data.pdfCompressor.WriteAsync(dstFile, data);
Debug.WriteLine("MainThread: WriteAsync returned...");
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS22\Resources\Images";
}