Print() メソッドがWPFとWinFormsでハングする

This article was translated from English: Does it need improvement?
Translated
View the article in English

WPFやWinFormsアプリケーションで同期Print()メソッドを呼び出すと、メソッドは呼び出されますが、完了しません。 呼び出しは無期限にハングし、スレッドをブロックし、印刷ジョブ自体が有効であってもUIがフリーズします。

var printer = new IronPrint.Printer();
printer.Print("Test print"); // Hangs here
var printer = new IronPrint.Printer();
printer.Print("Test print"); // Hangs here
Dim printer As New IronPrint.Printer()
printer.Print("Test print") ' Hangs here
$vbLabelText   $csharpLabel

これは想定される動作です。 同期Print()はアプリケーションのUIスレッドで実行され、そこでWPFのディスパッチャーとスレッドコンテキストがIronPrintの印刷パイプラインと衝突し、呼び出しをブロックします。

解決策

同期メソッドの代わりに非同期APIを呼び出します。

var printer = new IronPrint.Printer();
await printer.PrintAsync("Test print");
var printer = new IronPrint.Printer();
await printer.PrintAsync("Test print");
Dim printer = New IronPrint.Printer()
Await printer.PrintAsync("Test print")
$vbLabelText   $csharpLabel

PrintAsync()は印刷操作をブロックパスから移し、ジョブが完了し、WPFとWinFormsの両方でUIが応答し続けるようにします。

ベストプラクティス

  • IronPrintを更新する: 利用可能な修正を取り入れるため最新バージョンを実行します。
  • 非同期APIを推奨: WPFやWinFormsでUIスレッドのデッドロックを避けるためにPrintAsync()を利用してください。
  • メインスレッドをブロックしない: 非同期呼び出しに対して.Wait()を避けてください。
  • 長時間実行されるI/Oを外部に委譲する: 印刷やその他の外部の作業をバックグラウンドまたは非同期タスクに保ちます。
Curtis Chau
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 44,051 | バージョン: 2026.7 リリースされたばかり
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか? PM > Install-Package IronPrint
サンプルを実行する プリンターに出力されるドキュメントを見る。