1

印刷ジョブをプリンターに送信しており、自分のキューに反映するためにステータスを追跡しようとしています。

印刷ジョブが「印刷済み」、「完了」ステータスを通過しないようです。

.net オブジェクトを間違った方法で使用していないかどうかを確認するために、小さなテスト プログラムを作成しましたが、それでも問題は発生しました。テスト プログラムを実行して新しい印刷ジョブをクエリし、ジョブが見つかったら、そのステータスを確認するために毎回頻繁にポーリングして更新し、何も見逃していないことを確認しました。

PrintServer ps = new PrintServer(@"\\printServer");
PrintQueue pq = new PrintQueue(ps, "PDF Writer - bioPDF");
PrintSystemJobInfo jobInfo = null;

while (jobInfo == null)
{
    pq.Refresh();
    var printJobs = pq.GetPrintJobInfoCollection(); 

    foreach (var printJob in printJobs)
    {
        printJob.Refresh();

        jobInfo = printJob;
        break;
    }

    Thread.Sleep(100);
}

PrintJobStatus jobStatus = PrintJobStatus.None;
PrintJobStatus prevJobStatus = PrintJobStatus.None;
while (true)
{
    try
    {
        jobInfo.Refresh();
    } catch { }

    prevJobStatus = jobStatus;
    jobStatus = jobInfo.JobStatus;

    if (jobStatus != prevJobStatus)
    {
        Console.WriteLine("**UPDATE**");
        SpotTroubleUsingProperties(jobInfo); // Microsoft example method that prints a description of each possible job status
    }

    Thread.Sleep(20);
}

ドキュメントが印刷されても、得られる結果は次のとおりです。

**UPDATE**
The job is spooling now.
**UPDATE**
The job is printing now.
**UPDATE**
The user or someone with administration rights to the queue has deleted the job. It must be resubmitted.

ドキュメントが「完了」ステータスになったことをどのように知ることができますか?

4

2 に答える 2