저장 작업 중단이 멈춤
안타깝게도 문서 저장 중에 애플리케이션이 멈추고 응답하지 않는 상황이 발생할 수 있습니다. 이 기능은 대용량 또는 복잡한 PDF 문서 저장과 같은 장기 실행 작업을 우아하게 취소할 수 있게 하여 애플리케이션이 멈추는 것을 방지하고 응답성을 향상시킵니다. 이 기능을 애플리케이션에 통합하는 데 필요한 정보를 찾을 수 있습니다. 이 접근 방식은 리소스 집약적인 작업 중에도 애플리케이션이 응답성을 유지하도록 보장합니다.
‘InterruptMonitor’ 클래스는 문서 저장 프로세스가 너무 오래 걸릴 경우 이를 중단할 수 있는 기능을 제공합니다. (https://reference.aspose.com/pdf/net/aspose.pdf.forms/form/properties/xfa ) .
다음 코드 스니펫은 Aspose.PDF.Drawing 라이브러리와 함께 작동합니다.
InterruptMonitor 사용하기
구현에는 여러 주요 단계가 포함됩니다:
InterruptMonitor
생성: InterruptMonitor
객체를 인스턴스화합니다. 이 객체는 스레드 중단을 위한 신호 역할을 합니다.
ThreadLocalInstance
할당: 장기 실행 Aspose.PDF 작업을 시작하기 전에 현재 스레드에 대해 InterruptMonitor
인스턴스를 InterruptMonitor.ThreadLocalInstance
에 할당합니다. 이는 모니터를 스레드에 연결합니다.
스레드 실행: Aspose.PDF 작업(예: Document.Save()
)을 포함하는 코드를 별도의 스레드 내에서 실행합니다.
중단 신호: 적절한 시점(예: 타임아웃 후 또는 사용자 작업 후)에 monitor.Interrupt()
를 호출합니다. 이는 스레드에 종료 신호를 보냅니다.
예외 처리: 중단된 경우 Document.Save()
메서드는 OperationCanceledException
을 발생시킵니다. 이 예외를 try-catch
블록을 사용하여 처리합니다. 적절한 예외 처리는 애플리케이션 안정성에 중요합니다.
다음 코드 스니펫은 PDF 처리에서 InterruptMonitor를 사용하는 방법을 보여줍니다.
.NET Core 3.1
Copy
private static void InterruptMonitorExample ( )
{
var dataDir = RunExamples . GetDataDir_AsposePdf_Text ();
var longTextFile = dataDir + "LongTextFile.txt" ;
var outputFile = dataDir + "interrupt_output.pdf" ;
var longText = File . ReadAllText ( longTextFile );
using ( var monitor = new InterruptMonitor ())
{
var worker = new RowSpanWorker ( outputFile , monitor , longText );
var thread = new Thread ( worker . Work );
thread . Start ();
Thread . Sleep ( 500 );
monitor . Interrupt ();
thread . Join ();
}
}
private class RowSpanWorker
{
private readonly string outputPath ;
private readonly string longText ;
private readonly Aspose . Pdf . Multithreading . InterruptMonitor monitor ;
public RowSpanWorker ( string outputPath , Aspose . Pdf . Multithreading . InterruptMonitor monitor , string longText )
{
this . outputPath = outputPath ;
this . monitor = monitor ;
this . longText = longText ;
}
public void Work ( )
{
using ( var document = new Aspose . Pdf . Document ())
{
Aspose . Pdf . Multithreading . InterruptMonitor . ThreadLocalInstance = this . monitor ;
var page = document . Pages . Add ();
var table = new Aspose . Pdf . Table
{
DefaultCellBorder = new Aspose . Pdf . BorderInfo ( Aspose . Pdf . BorderSide . All , 0.1F )
};
var row0 = table . Rows . Add ();
var cell00 = row0 . Cells . Add ( this . longText );
cell00 . RowSpan = 2 ;
cell00 . IsWordWrapped = true ;
row0 . Cells . Add ( "Ipsum Ipsum Ipsum" );
row0 . Cells . Add ( "Dolor Dolor Dolor" );
var row1 = table . Rows . Add ();
row1 . Cells . Add ( "Ipsum Dolor" );
row1 . Cells . Add ( "Dolor Dolor" );
page . Paragraphs . Add ( table );
try
{
document . Save ( this . outputPath );
}
catch ( OperationCanceledException ex )
{
Console . WriteLine ( $"Operation cancelled: {ex.Message} " );
}
}
}
}
.NET 8
Copy private static void InterruptMonitorExample ( )
{
var dataDir = RunExamples . GetDataDir_AsposePdf_Text ();
var longTextFile = Path . Combine ( dataDir , "LongTextFile.txt" );
var outputFile = Path . Combine ( dataDir , "interrupt_output.pdf" );
var longText = File . ReadAllText ( longTextFile );
using Aspose.Pdf.Multithreading.InterruptMonitor monitor = new ();
var worker = new RowSpanWorker ( outputFile , monitor , longText );
var thread = new Thread ( worker . Work );
thread . Start ();
Thread . Sleep ( 500 );
monitor . Interrupt ();
thread . Join ();
}
public class RowSpanWorker
{
private readonly string _outputFile ;
private readonly InterruptMonitor _monitor ;
private readonly string _longText ;
public RowSpanWorker ( string outputFile , Aspose . Pdf . Multithreading . InterruptMonitor monitor , string longText )
{
_outputFile = outputFile ;
_monitor = monitor ;
_longText = longText ;
}
public void Work ( )
{
using Aspose.Pdf.Document document = new ();
Aspose . Pdf . Multithreading . InterruptMonitor . ThreadLocalInstance = this . _monitor ;
var page = document . Pages . Add ();
var table = new Aspose . Pdf . Table
{
DefaultCellBorder = new Aspose . Pdf . BorderInfo ( Aspose . Pdf . BorderSide . All , 0.1F )
};
var row0 = table . Rows . Add ();
var cell00 = row0 . Cells . Add ( this . _longText );
cell00 . RowSpan = 2 ;
cell00 . IsWordWrapped = true ;
row0 . Cells . Add ( "Ipsum Ipsum Ipsum Ipsum Ipsum Ipsum " );
row0 . Cells . Add ( "Dolor Dolor Dolor Dolor Dolor Dolor " );
var row1 = table . Rows . Add ();
row1 . Cells . Add ( "IpsumDolor Dolor Dolor Dolor Dolor " );
row1 . Cells . Add ( "DolorDolor Dolor Dolor Dolor Dolor " );
page . Paragraphs . Add ( table );
try
{
document . Save ( this . _outputFile );
}
catch ( OperationCanceledException ex )
{
Console . WriteLine ( ex . Message );
}
}
}