我正在使用外部DLL(pdfsharp)打开(然后操作)大量PDF文件。我用:
Dim inputDocument = Pdf.IO.PdfReader.Open(PDFPath, IO.PdfDocumentOpenMode.ReadOnly)
问题是 - 它似乎挂在某些罕见的文件上。我似乎没有得到任何超时 - 它只是在这条线上挂了好几个小时。我们用这个代码读取了数千个文件,总是在微小的文件上,所以我认为如果这个方法花费的时间超过一两秒,快速解决方法可能会以某种方式超时。但我没有看到一个简单的方法来做到这一点。我希望避免激活一个工作线程。
关于如何限制此线程的任何想法都允许执行时间,还是有更好(但更简单)的方法?
答案 0 :(得分:0)
Open()调用不应该挂起。决不。如果您向我们提供导致Open()挂起的文件,我们可以对此进行调查。
您的程序是否在服务器上运行?你使用PDFsharp的DEBUG版本吗?也许它只是一个简单的Debug.Assert()被触发,但没有人可以回答它。使用RELEASE构建可以解决这个问题。
答案 1 :(得分: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