1

我正在使用外部 DLL (pdfsharp) 打开(然后操作)大量 PDF 文件。我用:

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

问题是 - 它似乎挂在某些罕见的文件上。我似乎没有任何超时 - 它只是在这条线上挂了几个小时。我们用这个代码读取了数千个文件,总是在小文件上,所以我想一个快速的解决方法可能是如果这个方法需要超过一两秒的时间就超时。但我没有看到一个简单的方法来做到这一点。我希望避免启动工作线程。

关于我如何限制这个线程允​​许的执行时间的任何想法,或者有没有更好(但简单)的方法?

4

2 回答 2

0

Open() 调用不应挂起。绝不。如果您向我们提供导致 Open() 挂起的文件,我们可以对此进行调查。

您的程序是否在服务器上运行?您使用 PDFsharp 的 DEBUG 版本吗?也许它只是一个简单的 Debug.Assert() 被触发,但没有人能回答它。使用 RELEASE 构建可以解决这个问题。

于 2011-07-07T06:45:57.773 回答
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
于 2011-08-11T13:06:02.860 回答