Método Print() Trava em WPF e WinForms
Quando você chama o método Print() síncrono em um aplicativo WPF ou WinForms, o método é invocado mas nunca é concluído. A chamada trava indefinidamente, bloqueando o thread e congelando a UI mesmo quando o trabalho de impressão em si é válido.
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
Este é o comportamento esperado. O Print() síncrono roda no thread de UI do aplicativo, onde o Dispatcher do WPF e o contexto de threading entram em conflito com o pipeline de impressão IronPrint e bloqueiam a chamada.
Solução
Chame a API assíncrona em vez da síncrona.
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")
PrintAsync() move a operação de impressão para fora do caminho bloqueante, então o trabalho é concluído e a UI permanece responsiva tanto em WPF quanto em WinForms.
Melhores práticas
- Atualize o IronPrint: execute a versão mais recente para capturar a correção onde disponível.
- Prefira APIs assíncronas: opte por
PrintAsync()em WPF e WinForms para evitar impasses no thread de UI. - Nunca bloqueie no thread principal: evite
.Resulte.Wait()contra uma chamada assíncrona. - Descarregue I/O de longa duração: mantenha a impressão e outros trabalhos externos em tarefas de backend ou assíncronas.

