2011-07-06 5 views
1

외부 DLL (pdfsharp)을 사용하여 많은 PDF 파일을 열고 조작합니다. 나는 다음을 사용한다 :메서드가 허용되는 시간을 제한하여 중단을 방지 할 수 있습니까?

Dim inputDocument = Pdf.IO.PdfReader.Open(PDFPath, IO.PdfDocumentOpenMode.ReadOnly) 

문제는 - 특정 희소 한 파일에 걸린 것처럼 보인다. 나는 시간 초과를 얻지 않는 것처럼 보입니다. 단지이 라인에서 몇 시간 만 달렸습니다. 우리는이 코드로 수천 개의 파일을 항상 작은 파일로 읽었으므로이 방법이 2, 3 초 이상 걸리면 빠른 해결 방법이 시간 초과 될 수 있다고 생각했습니다. 그러나 나는 이것을 할 수있는 간단한 방법을 보지 못했다. 나는 작업자 스레드를 회전시키지 않기를 바라고 있습니다.

이 스레드를 어떻게 제한할지 생각해보십시오. 실행 시간이 허용 되었습니까? 아니면 더 나은 (그러나 간단한) 방법이 있습니까?

+1

샘플을 PdfSharp 팀에 보낼 수 있다면 문제가 무엇인지 알 수있을 것이라고 확신하지만 PDF의 데이터는 공유 할 수 없으며 다른 교육 기관에서 만들었습니다. 우리는 '읽을 수없는'PDF 파일의 테이블을 보관합니다. 수천 개의 파일 중 6 번만이 발생했지만, 그 파일을 찾는 데 이상한 것은 없습니다. – aSkywalker

답변

0

우리는 AbortableBackgroundWorker를 생성하여이 문제를 해결하기 위해 작업을 마쳤습니다. 어떤 코드가 이것이 끝났는지 확신 할 수 없지만 온라인으로 찾은 다음 여기에서 공유했습니다. PDF 중 하나가 PdfSharp Open() 호출을 중단하는 드문 경우에 우리는 백그라운드 작업자를 중단합니다.

Public Class AbortableBackgroundWorker 
    Inherits BackgroundWorker 

    Private workerThread As Thread 

    Protected Overrides Sub OnDoWork(e As DoWorkEventArgs) 
     workerThread = Thread.CurrentThread 
     Try 
      MyBase.OnDoWork(e) 
     Catch generatedExceptionName As ThreadAbortException 
      e.Cancel = True 
      'We must set Cancel property to true! 
      'Prevents ThreadAbortException propagation 
      Thread.ResetAbort() 
     End Try 
    End Sub 


    Public Sub Abort() 
     If workerThread IsNot Nothing Then 
      workerThread.Abort() 
      workerThread = Nothing 
     End If 
    End Sub 

End Class 
0

Open() 호출이 중단되어서는 안됩니다. 못. Open()이 멈추게하는 파일을 제공하면이를 조사 할 수 있습니다.

프로그램이 서버에서 실행됩니까? 당신은 PDFsharp의 DEBUG 빌드를 사용합니까? 어쩌면 그것은 단지 Debug.Assert()가 트리거 된 것이지만 아무도 응답 할 수 없습니다. RELEASE 빌드를 사용하면이 문제를 해결할 수 있습니다.

+0

나는 출시 버전을 사용하고 있다고 생각합니다. 버전 1.31.1789.0 (런타임 버전 v2.0.50727)입니다. – aSkywalker

+0

분명히 타격이 게시물에 의견을 입력하십시오. 나는 어셈블리 다운로드 dll을 사용하고 있었다. 방금 최신 프로젝트를 다운로드하고 출시판에 빌드했습니다. 확신 할 수있는 RELEASE 어셈블리를 얻을 수있는 자리가 있습니까? 버전 1.31.1789.0 (런타임 버전 v2.0.50727)입니다. 불행히도 PDF 파일을 보낼 수 없습니다. 나는 서버에서 실행되지 않습니다. – aSkywalker

+0

PDF 파일이 유효하지 않으면 중단되는지 확인합니다. – Yuan

관련 문제