我可以通过限制允许方法的时间来避免可能的挂起吗?

时间:2011-07-06 20:04:34

标签: vb.net pdfsharp

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

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

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

关于如何限制此线程的任何想法都允许执行时间,还是有更好(但更简单)的方法?

2 个答案:

答案 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