Druckmethode hängt in WPF und WinForms
Wenn Sie die synchrone Print()-Methode in einer WPF- oder WinForms-Anwendung aufrufen, wird die Methode aufgerufen, aber nie abgeschlossen. Der Aufruf hängt auf unbestimmte Zeit und blockiert den Thread und friert die Benutzeroberfläche ein, selbst wenn der Druckauftrag selbst gültig ist.
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
Dies ist ein erwartbares Verhalten. Die synchrone Print() läuft im UI-Thread der Anwendung, wo der WPF-Dispatcher und der Threading-Kontext mit der Druckpipeline von IronPrint in Konflikt geraten und den Aufruf blockieren.
Lösung
Rufen Sie die asynchrone API anstelle der synchronen auf.
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() verlagert den Druckvorgang von dem blockierenden Pfad, sodass der Auftrag abgeschlossen wird und die UI in WPF und WinForms reaktionsfähig bleibt.
Bewährte Verfahren
- Aktualisieren Sie IronPrint: Führen Sie die neueste Version aus, um das verfügbare Fix zu übernehmen.
- Bevorzugen Sie asynchrone APIs: Verwenden Sie
PrintAsync()in WPF und WinForms, um UI-Thread-Deadlocks zu vermeiden. - Blockieren Sie niemals den Haupt-Thread: Vermeiden Sie
.Resultund.Wait()bei einem asynchronen Aufruf. - Verlagern Sie langes I/O: Halten Sie Druck- und andere externe Arbeiten auf Hintergrund- oder asynchronen Aufgaben.

