나는 윈도우 C# 응용 프로그램을 가지고 있으며 웹 서버에있는 pdf 파일을 Acrobat 양식의 개체에 추가하고 싶습니다.C# 응용 프로그램에 큰 PDF를 표시하려면 어떻게합니까?
pdf.loadfile(@"http://somewhere.com/nowwhere.pdf")
내 pdf 크기가 커서 전체 파일이로드 될 때까지 응용 프로그램이 멈춘 것 같습니다.
사용자가 응용 프로그램이 중단되었다는 인식하에 대형 파일을 읽고 싶습니다.
나는 윈도우 C# 응용 프로그램을 가지고 있으며 웹 서버에있는 pdf 파일을 Acrobat 양식의 개체에 추가하고 싶습니다.C# 응용 프로그램에 큰 PDF를 표시하려면 어떻게합니까?
pdf.loadfile(@"http://somewhere.com/nowwhere.pdf")
내 pdf 크기가 커서 전체 파일이로드 될 때까지 응용 프로그램이 멈춘 것 같습니다.
사용자가 응용 프로그램이 중단되었다는 인식하에 대형 파일을 읽고 싶습니다.
죄송합니다, 코드가없는, 그러나 비동기 파일에이 문서는 I/O가 당신에게 도움이 될 수 있습니다
http://www.devsource.com/c/a/Using-VS/Making-Asynchronous-File-IO-Work-in-NET-A-Survival-Guide/
세 가지 제안을.
처음에는 온라인 설명서처럼 페이지를로드하고 중단해야합니다. 이것은 약간 짜증나지만 로딩 시간을 줄여 줄 것입니다. 나는 ItextSharp가 이것을 할 수있는 몇 가지 기능을 가지고 있다고 생각한다.
두 번째 시도 압축. 다시 itextsharp에는 이것을 허용하는 도구가 있습니다
제 3의 제안은 This thread을 확인하는 것입니다. 몇 가지 괴상한 로딩 구문을 선택하고 애니메이션 GIF를 사용하여 클라이언트를 긴 로딩 시간에서 산만하게하십시오. 분명히 이것은 최후의 수단이지만 유용 할 수 있습니다.
작업자 스레드를 사용하십시오. 나는 다음을 수행 할
MSDN Link to BackgroundWorker
(예를 들어 BackgroundWorker에) :
Pdf pdf;
void ShowPdf() {
if (this.InvokeRequired) {
this.Invoke(() => this.ShowPdf());
}
// give pdf a window...
}
void LoadPdf() {
System.Threading.ThreadPool.QueueUserWorkItem(() => {
pdf.LoadFile("http://example.com/somelarge.pdf");
this.ShowPdf();
});
}
이 이이 올 수 있다는 문제는 (내가 함께 일한 적이 : - 당신은 로딩을 할 수있는 백그라운드 스레드를 사용할 수 있는지 분명히
, 모든 세트 것 Acrobat의 COM PDF 뷰어)는 PDF 개체가 UI 스레드에 있어야한다는 것입니다. 이 경우 문제가 발생할 것입니다.
PDF.LoadFile을 UI 스레드에서 실행해야하는 경우 HttpWebRequest를 사용하여 BackgroundWorker에서 파일을 다운로드하고 로컬에 저장 한 다음 Invoke'd (UI 스레드) 함수에서 pdf.loadfile()을 호출 할 수 있습니다.
COM 개체는 UI 스레드에서 실행해야 # 1이 불가능하고 # 2도 차단되어야합니다. – user7116
나는 UI 객체를 필요로하는 COM 객체의 오류를 본 적이 없습니다. 어떤 경우에 이런 일이 일어날 것입니까? – RWendi