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:将打印和其他外部工作保持在后台或异步任务中。
Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。

准备开始了吗?
Nuget 下载 44,051 | 版本: 2026.7 刚刚发布
Still Scrolling Icon

还在滚动吗?

想快速获得证据? PM > Install-Package IronPrint
运行示例 观看您的文档打到打印机上。