4

System.Drawing.Printing古い名前空間で利用可能なメソッドを使用して印刷しています。これは、PrintDocumentオブジェクトがPrintPageイメージをロードして即座に破棄できるイベントを提供するためです。FixedDocument を使用して印刷しようとすると、メモリ不足の状態になることがよくありました。

しかし、奇妙な問題EndPrintに遭遇しました。ページをスプールした後、イベント ハンドラーを使用して印刷アプリケーションを閉じます。印刷ドキュメントを呼び出すとClose()、ページが欠落したり、プリンターがあいまいな (タイムアウト/構文) エラーを出力したりすることがあります。

Hide()私が現在持っている回避策は、呼び出してから任意の時間 (私の場合は 30 秒) 待ってから閉じることを含むちょっとしたハックです。これはうまくいくようです。

私はこのアプローチが本当に好きではありません - どのくらい待つべきかをどのように知っていますか? EndPrint は、最後のページがスプールされたことを確認するべきではありませんか?

「適切な」修正のアイデアはありますか?または何が起こっているのか説明しますか?

乾杯

4

1 に答える 1

0

印刷の終了をキャッチするためにこのイベントを使用しないでください。非同期印刷呼び出しを使用してアプリケーションを正しく完了し、クラス System.Threading.Tasks.Task の Wait メソッドを使用してアプリケーションが完了するのを待ちました。

// Start print asynchronously
System.Threading.Tasks.Task PrintTask = new System.Threading.Tasks.Task(new Action(PD.Print));
PrintTask.Start();
// Wait
PrintTask.Wait();
// End of application
System.Environment.Exit(0);
于 2021-08-20T07:54:02.643 に答える