PrintQueueCollection printQueues = null;
var printServer = new PrintServer();
printQueues = printServer.GetPrintQueues(new[] { EnumeratedPrintQueueTypes.Local, EnumeratedPrintQueueTypes.Connections });
PrintQueue printQueue = printQueues.FirstOrDefault(p => p.Name.ToUpperInvariant().Contains(PrintName.ToUpperInvariant()));
if (printQueue != null)
{
try
{
var jobs = printQueue.GetPrintJobInfoCollection().Count(j => j.JobStatus != PrintJobStatus.Completed);
if (jobs == 0)
{
//print done
break;
}
}
catch
{
//sometimes will happen
}
}