Public Function CreatePDFBytes(ByVal rtfstr As String) As Byte() ' PDFCreator has been created by the calling program ' create temporary directory and temporary filename Dim temppath As String = "c:\pdftemp" Dim fileBase As String = Path.GetFileNameWithoutExtension(Path.GetRandomFileName) Dim tempfile As String = fileBase & ".rtf" Dim tempfull As String = Path.Combine(temppath, tempfile) Dim temppdf As String = fileBase & ".pdf" Dim pdffull As String = Path.Combine(temppath, temppdf) ''-- Write out RTF File.WriteAllText(tempfull, rtfstr) '-- Convert to PDF and write to disk Dim pdfo As PDFCreator.clsPDFCreatorOptions pdfo = Me.Creator.cOptions '-- Setup options With pdfo .UseAutosave = 1 .AutosaveFilename = temppdf ' .StartStandardProgram = 1 .AutosaveDirectory = temppath End With Me.Creator.cOptions = pdfo Dim pdfbyte As Byte() = Nothing Using watcher As New FileSystemWatcher() watcher.Path = temppath watcher.Filter = "*.pdf" watcher.EnableRaisingEvents = True ' here is where i am confused ' Dim results As WaitForChangedResult 'this is the line that actually creates the pdf - it works, but my problem has been ' if I don't wait until it is definitely created I'll get an error when I try to read it into ' the array. If I step through and don't run the line to read the pdf to the byte array ' until I see the file is definitely there, all is well ' as many as twenty files may be processed in a loop ' can't wrap my head around the sequence of the next two lines ' if I create first, I'm not waiting ' if I wait first I time out before I'm creating Me.Creator.cPrintFile(tempfull) results = watcher.WaitForChanged(WatcherChangeTypes.Created, 20000) If results.TimedOut Then ' handle failure to create Else ' read the file into pdfbyte end if End Using Return pdfbyte End FunctionThoughts ?