WPF 및 WinForms의 Print() 메서드가 멈추는 문제
WPF 또는 WinForms 애플리케이션에서 동기 Print() 메서드를 호출할 때 메서드는 호출되지만 완료되지 않습니다. 호출은 무기한으로 멈춰 스레드를 차단하고 인쇄 작업 자체가 유효하더라도 UI가 멈춥니다.
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
이는 예상되는 동작입니다. 동기 Print()는 애플리케이션의 UI 스레드에서 실행되며, WPF 디스패처와 스레드 컨텍스트가 IronPrint의 인쇄 파이프라인과 충돌하여 호출을 차단합니다.
해결책
동기 메서드 대신 비동기 API를 호출하십시오.
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()는 프린트 작업을 차단 경로에서 제거하여 작업이 완료되고 UI가 WPF 및 WinForms에서 반응성을 유지합니다.
모범 사례
- IronPrint 업데이트: 사용 가능한 경우 수정 사항을 적용하기 위해 최신 버전을 실행하십시오.
- 비동기 API 우선 사용: WPF 및 WinForms에서 UI 스레드 데드락을 피하기 위해
PrintAsync()를 사용하십시오. - 메인 스레드를 차단하지 않기: 비동기 호출에 대해
.Result및.Wait()를 피하십시오. - 장시간 실행되는 I/O 분산 처리: 인쇄 및 기타 외부 작업을 백그라운드 또는 비동기 작업으로 유지하십시오.

