El método Print() se cuelga en WPF y WinForms
Cuando llamas al método sincrónico Print() en una aplicación WPF o WinForms, el método se invoca pero nunca se completa. La llamada se cuelga indefinidamente, bloqueando el hilo y congelando el UI incluso cuando el trabajo de impresión en sí es 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 comportamiento es el esperado. El sincrónico Print() se ejecuta en el hilo de la interfaz de usuario de la aplicación, donde el Dispatcher de WPF y el contexto de subprocesos entran en conflicto con la canalización de impresión de IronPrint y bloquean la llamada.
Solución
Llama a la API asíncrona en lugar de a la sincrónica.
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() mueve la operación de impresión fuera del camino bloqueante, por lo que el trabajo se completa y la interfaz de usuario se mantiene receptiva tanto en WPF como en WinForms.
Bestes prácticas
- Actualizar IronPrint: ejecuta la última versión para recoger la solución donde esté disponible.
- Prefiera las API asíncronas: utilice
PrintAsync()en WPF y WinForms para evitar bloqueos de hilos de interfaz de usuario. - Nunca bloquee en el hilo principal: evite
.Resulty.Wait()contra una llamada asíncrona. - Descargar tareas de I/O prolongadas: mantén la impresión y otros trabajos externos en tareas de fondo o asíncronas.

