title: Programmatically Printing in Adobe Reader 9 using .NET Interop
body: <p>I am using VB.Net WinForms.  I would like to call the Adobe Reader 9 ActiveX control to print some PDFs.  I have added the ActiveX control to the VS toolbox (the dll is AcroPDF.dll, the COM name "Adobe PDF Reader".  After some experiment the following code works.</p>
  
  <pre><code>Dim files As String() = Directory.GetFiles(TextBoxPath.Text, "*.pdf", SearchOption.TopDirectoryOnly)
  
  Using ActiveXPDF As New AxAcroPDFLib.AxAcroPDF
  
      Me.Controls.Add(ActiveXPDF)
      ActiveXPDF.Hide()
  
      For Each filename As String In files
  
          ActiveXPDF.LoadFile(filename)
          ActiveXPDF.printAll()
  
          'Begin Yukky Hack    '
  
  
          Dim endTime As Date = DateAdd(DateInterval.Second, 20, Now)
          Do While Now &lt; endTime
              My.Application.DoEvents()
          Loop
  
          'End Yuk   '
  
      Next
  
  End Using
  </code></pre>
  
  <p>Without the Yuk bit this will only print some of the PDFs, it seems that the End Using statement is calling dispose on the control before it has finished printing.</p>
  
  <p>Therefore it seems the call to printAll is non-blocking but I can't find a callback or status property I can query to see if the print spooling has been completed.  I am missing a property/method or is there a more elegant (and more responsive) work around?</p>