Metoda Print() wiesza się w WPF i WinForms
Gdy wywolasz synchroniczna metode Print() w aplikacji WPF lub WinForms, metoda zostanie wywolana, ale nigdy nie zostanie zakonczona. Wywołanie wiesza się na zawsze, blokując wątek i zamrażając interfejs użytkownika, nawet gdy zadanie drukowania jest prawidłowe.
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
Jest to oczekiwane zachowanie. Synchroniczne Print() uruchamia sie na watku interfejsu uzytkownika aplikacji, gdzie Dispatcher WPF i kontekst watek kolidują z potokiem drukowania IronPrint i blokują wywołanie.
Rozwiązanie
Zamiast synchronizacyjnego wykorzystaj API asynchroniczne.
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() przenosi operacje drukowania poza sciezke blokujaca, dzieki czemu zadanie konczy sie, a interfejs uzytkownika pozostaje responsywny zarowno w WPF, jak i WinForms.
Najlepsze praktyki
- Zaktualizuj IronPrint: użyj najnowszej wersji, aby podnieść poprawkę, gdzie jest dostępna.
- Preferuj asynchroniczne interfejsy API: uzyj
PrintAsync()w WPF i WinForms, aby uniknac zablokowania watku UI. - Nigdy nie blokuj glownego watku: unikaj
.Resulti.Wait()przeciwko asynchronicznemu wywolaniu. - Przekieruj długie działania I/O: utrzymuj drukowanie i środki zewnętrzne w zadaniach w tle lub asynchronicznych.

