none
prints PDF files asynchronous RRS feed

  • Question

  • Hi

    I did a class that prints PDF files without opening the files, but I would like to make it asynchronous.

    I read the Microsoft documents on Async but I found nothing.

    Please can someone tell me how to do it or some tutorial?
    Thank you
    Fabrizio

    This is the code:

    Imports System.Drawing.Printing
    Imports System.IO
    
    
    Public Class StampaPDF
    
        'CLASSE CHE STAMPA I PDF SENZA APRIRE I FILE
    
        Public Sub New(ByVal args As String)
    
            Dim PathDisegni As String = args
    
            Dim mioPdf As New Pdf
            Dim files() As String = Directory.GetFiles(PathDisegni)
    
            'Variabile predicate con lambda func con parametri che passa una stringa e ritorna un boolean
            Dim predicate As Func(Of String, Boolean) = Function(file) file.Contains(".pdf")
    
            For Each file As String In files.Where(predicate)
                mioPdf.PrintPDFs2(file)
            Next
    
        End Sub
    
    End Class
    
    Public Class Pdf
    
        'Dichiara i PrinterSetting
        Public Shared defaultPrinterSetting As PrinterSettings = Nothing
    
        Public Function PrintPDFs(ByVal pdfFileName As String) As Boolean
    
            Try
                Dim psi As New System.Diagnostics.ProcessStartInfo()
                psi.UseShellExecute = True
                psi.Verb = "print"
                psi.WindowStyle = ProcessWindowStyle.Hidden
                psi.FileName = pdfFileName
                Dim myProcess As System.Diagnostics.Process
                myProcess = System.Diagnostics.Process.Start(psi)
                myProcess.WaitForInputIdle()
                Dim localProces As Diagnostics.Process = Diagnostics.Process.GetProcessById(myProcess.Id)
                localProces.CloseMainWindow()
                localProces.Close()
                Return True
            Catch ex As Exception
                Return False
            End Try
    
        End Function
    
        Public Shared Async Function PrintPDFs2(ByVal pdfFileName As String) As Task(Of Boolean)
            Try
    
                Dim DocPrinter As New DocumentPrinter
                'Ottiene la stampante di default del sistema
                defaultPrinterSetting = Await DocPrinter.GetDefaultPrinterSetting
    
                'Togliere il commento se si vuole cambiare la stampante di default prima di stampare
                'DocumentPrinter.ChangePrinterSettings(defaultPrinterSetting)
    
                'Stampa il file 
                If (Await DocPrinter.PrintFile(pdfFileName, defaultPrinterSetting)) Then
                    MsgBox("Il Disegno è stato stampato !!")
                Else
                    MsgBox("Il Disegno NON è stato stampato !!")
                End If
    
            Catch ex As Exception
                MsgBox(ex.Message.ToString)
            End Try
    
        End Function
    
    End Class
    
    Public NotInheritable Class DocumentPrinter
    
        Shared Sub New()
    
        End Sub
    
        Public Shared Async Function PrintFile(ByVal fileName As String, printerSetting As PrinterSettings) As Task(Of Boolean)
    
            Dim printProcess As Process = Nothing
            Dim printed As Boolean = False
    
            Try
                If printerSetting IsNot Nothing Then
                    Dim startInfo As New ProcessStartInfo()
                    startInfo.Verb = "Print"
                    startInfo.Arguments = Pdf.defaultPrinterSetting.PrinterName ' <----Stampante da usare---- 
                    startInfo.FileName = fileName
                    startInfo.UseShellExecute = True
                    startInfo.CreateNoWindow = True
                    startInfo.WindowStyle = ProcessWindowStyle.Hidden
    
                    Using print As System.Diagnostics.Process = Process.Start(startInfo)
                        'Chiude l'applicazione dopo x millisecondi con  WaitForExit(X)
                        print.WaitForExit(10000)
                        If print.HasExited = False Then
                            If print.CloseMainWindow() Then
                                printed = True
                            Else
                                printed = True
                            End If
                        Else
                            printed = True
                        End If
                        print.Close()
                    End Using
                Else
                    Throw New Exception("La Stampante NON è stata trovata nel sistema...")
                End If
    
            Catch ex As Exception
                Throw
            End Try
            Return printed
        End Function
    
    
    
    
        ''' <summary>
        ''' Ottieni le impostazioni predefinite della stampante nel sistema
        ''' </summary>
        ''' <returns></returns>
        ''' <remarks></remarks>
        Public Shared Async Function GetDefaultPrinterSetting() As Task(Of PrinterSettings)
    
            Dim defaultPrinterSetting As PrinterSettings = Nothing
    
            For Each printer As String In PrinterSettings.InstalledPrinters
    
                defaultPrinterSetting = New System.Drawing.Printing.PrinterSettings
                defaultPrinterSetting.PrinterName = printer
    
                If defaultPrinterSetting.IsDefaultPrinter Then
                    Return defaultPrinterSetting
                End If
    
            Next
    
            Return defaultPrinterSetting
    
        End Function
    
    End Class
    


    Tuesday, February 25, 2020 12:56 PM

All replies

  • Hi,

    Can you tell us what you want to accomplish by using asynchronous code? 

    Best Regards,

    Julie


    MSDN Community Support Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    Tuesday, March 3, 2020 1:09 AM
    Moderator