توقّف عن التحويل أو التحميل باستخدام InterruptMonitor عندما يستغرق وقتًا طويلاً
سيناريوهات الاستخدام المحتملة
يُسمح لـ Aspose.Cells بإيقاف تحويل الدفتر إلى تنسيقات مختلفة مثل PDF، HTML، إلخ باستخدام الكائن InterruptMonitor عندما يستغرق وقتًا طويلاً. عملية التحويل غالبًا ما تكون مكثفة جدًا من حيث استخدام وحدة المعالجة المركزية والذاكرة، ومن المفيد في كثير من الأحيان إيقافها عندما تكون الموارد محدودة. يمكنك استخدام InterruptMonitor للتوقف عن التحويل وكذلك لإيقاف تحميل دفتر العمل الضخم. يرجى استخدام خاصية Workbook.InterruptMonitor للتوقف عن التحويل والخاصية LoadOptions.InterruptMonitor لتحميل دفتر العمل الضخم.
توقّف عن التحويل أو التحميل باستخدام InterruptMonitor عندما يستغرق وقتًا طويلاً
يشرح الكود عينة التالي استخدام الكائن InterruptMonitor. يقوم الكود بتحويل ملف إكسل كبير إلى ملف PDF. سيستغرق عدة ثوانٍ (أكثر من 30 ثانية) لتحويله بسبب هذه السطور من الكود.
//Access cell AB1000000 and add some text inside it.
Cell cell = ws.getCells().get("AB1000000");
cell.putValue("This is text.");
كما ترون، الخلية AB1000000 بعيدة إلى حد ما في ملف XLSX. ومع ذلك، يقوم طريقة WaitForWhileAndThenInterrupt() بتقطيع عملية التحويل بعد 10 ثوانٍ وينتهي/يُنهي البرنامج. يرجى استخدام الكود التالي لتنفيذ الكود عينة.
new StopConversionOrLoadingUsingInterruptMonitor().testRun();
الكود المثالي
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
public class StopConversionOrLoadingUsingInterruptMonitor | |
{ | |
static String outDir = Utils.Get_OutputDirectory(); | |
//Create InterruptMonitor object | |
InterruptMonitor im = new InterruptMonitor(); | |
public class ConversionThread extends Thread | |
{ | |
private Thread monitorThread; | |
public ConversionThread(Thread monitorThread) | |
{ | |
this.monitorThread = monitorThread; | |
} | |
//This function will create workbook and convert it to Pdf format | |
void createWorkbookAndConvertItToPdfFormat() throws Exception | |
{ | |
//Create a workbook object | |
Workbook wb = new Workbook(); | |
//Assign it InterruptMonitor object | |
wb.setInterruptMonitor(im); | |
//Access first worksheet | |
Worksheet ws = wb.getWorksheets().get(0); | |
//Access cell AB1000000 and add some text inside it. | |
Cell cell = ws.getCells().get("AB1000000"); | |
cell.putValue("This is text."); | |
try | |
{ | |
//Save the workbook to Pdf format | |
wb.save(outDir + "output_InterruptMonitor.pdf"); | |
//Show successful message | |
System.out.println("Excel to PDF - Successful Conversion"); | |
//stop monitor thread | |
monitorThread.interrupt(); | |
} | |
catch (CellsException ex) | |
{ | |
if(ex.getCode() == ExceptionType.INTERRUPTED) | |
{ | |
System.out.println("Conversion process is interrupted - Message: " + ex.getMessage()); | |
} | |
else | |
{ | |
throw ex; | |
} | |
} | |
} | |
public void run() | |
{ | |
try | |
{ | |
createWorkbookAndConvertItToPdfFormat(); | |
} | |
catch(Exception ex) | |
{ | |
System.out.println("Conversion thread error - Message: " + ex.getMessage()); | |
} | |
} | |
}//ConversionThread | |
public class MonitorThread extends Thread | |
{ | |
//This function will interrupt the conversion process after 10s | |
void waitForWhileAndThenInterrupt() throws Exception | |
{ | |
Thread.sleep(1000 * 10); | |
im.interrupt(); | |
} | |
public void run() | |
{ | |
try | |
{ | |
waitForWhileAndThenInterrupt(); | |
} | |
catch (InterruptedException ex) | |
{ | |
System.out.println("Monitor thread is interrupted - Message: " + ex.getMessage()); | |
} | |
catch (Exception ex) | |
{ | |
System.out.println("Monitor thread error - Message: " + ex.getMessage()); | |
} | |
} | |
}//MonitorThread | |
public void testRun() throws Exception | |
{ | |
MonitorThread monitorThread = new MonitorThread(); | |
ConversionThread conversionThread = new ConversionThread(monitorThread); | |
monitorThread.start(); | |
conversionThread.start(); | |
monitorThread.join(); | |
conversionThread.join(); | |
} | |
public static void main(String[] args) throws Exception | |
{ | |
new StopConversionOrLoadingUsingInterruptMonitor().testRun(); | |
// Print the message | |
System.out.println("StopConversionOrLoadingUsingInterruptMonitor executed successfully."); | |
} | |
}//StopConversionOrLoadingUsingInterruptMonitor |