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 Dispatcher 和執行緒上下文與 IronPrint 的列印管道衝突,阻止了呼叫。
解決方案
調用非同步 API 而不是同步 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() 將列印操作移出阻塞路徑,因此作業完成,UI 在 WPF 和 WinForms 中保持響應。
最佳實踐
- 更新 IronPrint: 下載最新版本以獲取可用的修正。
- 偏好非同步 API: 在 WPF 和 WinForms 中使用
PrintAsync()以避免 UI 執行緒死鎖。 - 切勿在主執行緒上阻塞: 避免對非同步呼叫使用
.Result和.Wait()。 - 解除安裝長時間執行的 I/O 操作: 將列印和其他外部工作保持在背景或非同步任務中。
準備好開始了嗎?
Nuget 下載 44,051 | 版本: 2026.7 剛剛發布

