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而不是同步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线程死锁。 - 绝不要阻塞主线程:避免对异步调用进行
.Wait()。 - 卸载长时间运行的I/O:将打印和其他外部工作保持在后台或异步任务中。
准备开始了吗?
Nuget 下载 44,051 | 版本: 2026.7 刚刚发布

