【C#】【VB.NET】プリンターの印刷が終了するまで待つ
プリンターの印刷が終了するまで待つ方法を調べたのでメモ。
調べるきっかけがVisualBasic案件だったのでVB.NET版も。
下記コードは最小限なので必要に応じてエラー処理なりタイムアウト処理なり設定してください。
参考サイト
stackoverflow.com
【C#】
using System.Printing; /// <summary> /// プリンターのキューが終了するまで待機します。 /// </summary> /// <param name="printerName">プリンター名</param> private void WaitUntilEndOfPrinting(string printerName) { LocalPrintServer localPrintServer = new LocalPrintServer(); PrintQueue printQueue = localPrintServer.GetPrintQueue(printerName); PrintJobInfoCollection printJobInfos = printQueue.GetPrintJobInfoCollection(); foreach (PrintSystemJobInfo printJobInfo in printJobInfos) { bool isEnded = false; while (!isEnded) { System.Threading.Thread.Sleep(1000); printQueue.Refresh(); printJobInfo.Refresh(); isEnded = printJobInfo.IsCompleted || printJobInfo.IsDeleted || printJobInfo.IsPrinted; } } }
【VB.NET】
Imports System.Printing ''' <summary> ''' プリンターのキューが終了するまで待機します。 ''' </summary> ''' <param name="printerName">プリンター名</param> Private Sub WaitUntilEndOfPrinting(printerName As String) Dim localPrintServer As New LocalPrintServer Dim printQueue As PrintQueue = localPrintServer.GetPrintQueue(printerName) Dim printJobInfos As PrintJobInfoCollection = printQueue.GetPrintJobInfoCollection() For Each printJobInfo As PrintSystemJobInfo In printJobInfos Dim isEnded As Boolean = False While (Not isEnded) System.Threading.Thread.Sleep(1000) printQueue.Refresh() printJobInfo.Refresh() isEnded = printJobInfo.IsCompleted Or printJobInfo.IsDeleted Or printJobInfo.IsPrinted End While Next End Sub