Méthode Print() se bloque dans WPF et WinForms
Lorsque vous appelez la méthode synchrone Print() dans une application WPF ou WinForms, la méthode est invoquée mais ne s'achève jamais. L'appel se bloque indéfiniment, bloquant le fil et gelant l'interface utilisateur même lorsque la tâche d'impression elle-même est valide.
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
C'est le comportement attendu. La méthode synchrone Print() s'exécute sur le thread UI de l'application, où le Dispatcher WPF et le contexte de threading entrent en conflit avec le pipeline d'impression d'IronPrint et bloquent l'appel.
Solution
Appelez l'API asynchrone à la place de celle synchrone.
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() déplace l'opération d'impression hors du chemin bloquant, ce qui permet au travail de s'achever et à l'interface utilisateur de rester réactive dans les deux cas, WPF et WinForms.
Bonnes pratiques
- Mettez à jour IronPrint : exécutez la dernière version pour corriger le problème lorsqu'il est disponible.
- Privilégier les APIs asynchrones : utilisez
PrintAsync()dans WPF et WinForms pour éviter les interblocages du thread UI. - Ne jamais bloquer sur le thread principal : évitez
.Resultet.Wait()contre un appel asynchrone. - Déléguez les I/O à long terme : maintenez l'impression et autres travaux externes sur des tâches en arrière-plan ou asynchrones.

