Detener la conversión o carga utilizando InterruptMonitor cuando está tardando demasiado

Escenarios de uso posibles

Aspose.Cells permite detener la conversión de libros de trabajo a varios formatos como PDF, HTML, etc. utilizando el objeto InterruptMonitor cuando lleva demasiado tiempo. El proceso de conversión a menudo es intensivo en CPU y memoria, y a menudo es útil detenerlo cuando los recursos son limitados. Puede utilizar InterruptMonitor tanto para detener la conversión como para detener la carga de un libro de trabajo extenso. Utilice la propiedad Workbook.InterruptMonitor para detener la conversión y la propiedad LoadOptions.InterruptMonitor para cargar un libro de trabajo extenso.

Detener la conversión o carga utilizando InterruptMonitor cuando está tardando demasiado

El siguiente código de muestra explica el uso del objeto InterruptMonitor. El código convierte un archivo de Excel bastante grande a PDF. Tomará varios segundos (es decir, más de 30 segundos) en convertirse debido a estas líneas de código.

//Access cell J1000000 and add some text inside it.

Cell cell = ws.Cells["J1000000"];

cell.PutValue("This is text.");

Como puede ver, J1000000 es una celda bastante lejana en el archivo XLSX. Sin embargo, el método WaitForWhileAndThenInterrupt() interrumpe la conversión después de 10 segundos y el programa termina. Utilice el siguiente código para ejecutar el código de muestra.

 new StopConversionOrLoadingUsingInterruptMonitor().TestRun();

Código de muestra

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET
public class StopConversionOrLoadingUsingInterruptMonitor
{
//Output directory
static string outputDir = RunExamples.Get_OutputDirectory();
//Create InterruptMonitor object
InterruptMonitor im = new InterruptMonitor();
//This function will create workbook and convert it to Pdf format
void CreateWorkbookAndConvertItToPdfFormat(object threadObj)
{
Thread monitorThread = (Thread)threadObj;
//Create a workbook object
Workbook wb = new Workbook();
//Assign it InterruptMonitor object
wb.InterruptMonitor = im;
//Access first worksheet
Worksheet ws = wb.Worksheets[0];
//Access cell J1000000 and add some text inside it.
Cell cell = ws.Cells["J1000000"];
cell.PutValue("This is text.");
try
{
//Save the workbook to Pdf format
wb.Save(outputDir + "output_InterruptMonitor.pdf");
//Show successful message
Console.WriteLine("Excel to PDF - Successful Conversion");
//stop monitor thread
monitorThread.Interrupt();
}
catch (Aspose.Cells.CellsException ex)
{
if (ex.Code == ExceptionType.Interrupted)
{
Console.WriteLine("Conversion process is interrupted - Message: " + ex.Message);
}
else
{
throw ex;
}
}
}
//This function will interrupt the conversion process after 10s
void WaitForWhileAndThenInterrupt()
{
try
{
Thread.Sleep(1000 * 10);
im.Interrupt();
}
catch(ThreadInterruptedException e)
{
Console.WriteLine("Monitor thread is interrupted - Message: " + e.Message);
}
}
public void TestRun()
{
Thread monitorThread = new Thread(WaitForWhileAndThenInterrupt);
Thread conversionThread = new Thread(CreateWorkbookAndConvertItToPdfFormat);
monitorThread.Start();
conversionThread.Start(monitorThread);
monitorThread.Join();
conversionThread.Join();
}
public static void Run()
{
new StopConversionOrLoadingUsingInterruptMonitor().TestRun();
Console.WriteLine("StopConversionOrLoadingUsingInterruptMonitor executed successfully.");
}
}