1

外部DLL(pdfsharp)を使用して、多数のPDFファイルを開く(次に操作する)。私が使う:

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

問題は、特定のまれなファイルでハングしているようです。タイムアウトが発生していないようです。この行で何時間もハングします。このコードで何千ものファイルを常に小さなファイルで読み取るので、この方法に1〜2秒以上かかる場合は、何らかの方法でタイムアウトするのが簡単な回避策になるのではないかと考えていました。しかし、これを行う簡単な方法はわかりません。ワーカースレッドがスピンアップしないようにしたいと思っています。

このスレッドの実行時間を制限する方法について何か考えがありますか、それともより良い(しかし単純な)方法はありますか?

4

2 に答える 2

0

Open()呼び出しはハングしないはずです。一度もない。Open()がハングする原因となるファイルを提供していただければ、調査することができます。

プログラムはサーバー上で実行されますか?PDFsharpのDEBUGビルドを使用していますか?トリガーされるのは単純なDebug.Assert()かもしれませんが、誰もそれに答えることはできません。RELEASEビルドを使用すると、これを解決できます。

于 2011-07-07T06:45:57.773 に答える
0

AbortableBackgroundWorker を作成することで、この問題を回避しました。これが最終的に誰のコードだったのかはわかりませんが、オンラインで見つけてここで共有しました。PDF の 1 つが 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 に答える