Interrupt
InterruptMonitor.Interrupt method
Sendet eine Anfrage zur Unterbrechung des Betriebs.
public virtual void Interrupt()
Beispiele
Das folgende Beispiel zeigt, wie Sie die Bildkonvertierung in einem dedizierten Thread durchführen und den Vorgang einige Sekunden nach dem Start unterbrechen.
[C#]
/// <summary>
/// Dies ist eine Hilfsklasse, die die Bildkonvertierung initiiert und auf ihre Unterbrechung wartet.
/// </summary>
private class Worker
{
/// <summary>
/// Der Pfad zum Eingabebild.
/// </summary>
private readonly string inputPath;
/// <summary>
/// Der Pfad zum Ausgabebild.
/// </summary>
private readonly string outputPath;
/// <summary>
/// Die Speicheroptionen.
/// </summary>
private readonly Aspose.Imaging.ImageOptionsBase saveOptions;
/// <summary>
/// Der Interrupt-Monitor.
/// </summary>
private readonly Aspose.Imaging.Multithreading.InterruptMonitor monitor;
/// <summary>
/// Initialisiert eine neue Instanz des <see cref="Worker" /> Klasse.
/// </summary>
/// <param name="inputPath">Der Pfad zum Eingabebild.</param>
/// <param name="outputPath">Der Pfad zum Ausgabebild.</param>
/// <param name="saveOptions">Die Speicheroptionen.</param>
/// <param name="monitor">Der Interrupt-Monitor.</param>
public Worker(string inputPath, string outputPath, Aspose.Imaging.ImageOptionsBase saveOptions, Aspose.Imaging.Multithreading.InterruptMonitor monitor)
{
this.inputPath = inputPath;
this.outputPath = outputPath;
this.saveOptions = saveOptions;
this.monitor = monitor;
}
/// <summary>
/// Konvertiert ein Bild von einem Format in ein anderes. Behandelt Unterbrechungen.
/// </summary>
public void ThreadProc()
{
try
{
Aspose.Imaging.Image image = Aspose.Imaging.Image.Load(this.inputPath);
// Thread-lokale Instanz des Interrupt-Monitors setzen.
Aspose.Imaging.Multithreading.InterruptMonitor.ThreadLocalInstance = this.monitor;
try
{
image.Save(this.outputPath, this.saveOptions);
}
catch (Aspose.Imaging.CoreExceptions.OperationInterruptedException e)
{
System.Console.WriteLine(
"The worker thread #{0} has been interrupted at {1}",
System.Threading.Thread.CurrentThread.ManagedThreadId,
System.DateTime.Now);
}
finally
{
image.Dispose();
// Thread-lokale Instanz des Interrupt-Monitors zurücksetzen.
Aspose.Imaging.Multithreading.InterruptMonitor.ThreadLocalInstance = null;
}
}
catch (System.Exception e)
{
// Detaillierte Informationen über jede unerwartete Ausnahme ausgeben.
System.Console.WriteLine(e);
}
}
}
// Hier ist das Hauptbeispiel mit der Worker-Klasse.
string baseDir = "c:\\temp\\";
Aspose.Imaging.Multithreading.InterruptMonitor monitor = new Aspose.Imaging.Multithreading.InterruptMonitor();
Worker worker = new Worker(baseDir + "big.png", baseDir + "big.bmp", new Aspose.Imaging.ImageOptions.BmpOptions(), monitor);
// Worker in einem dedizierten Thread starten.
System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(worker.ThreadProc));
thread.Start();
// Erledige hier eine sinnvolle Arbeit
System.Threading.Thread.Sleep(2000);
// Anforderung zum Unterbrechen des Worker-Threads
monitor.Interrupt();
System.Console.WriteLine("Interrupting the worker thread #{0} at {1}", thread.ManagedThreadId, System.DateTime.Now);
// Auf Unterbrechung warten.
thread.Join();
System.Console.WriteLine("Done. Press ENTER to exit.");
System.Console.ReadLine();
// Die Ausgabe könnte so aussehen:
// Unterbrechen des Worker-Threads Nr. 14 am 06.08.2019 15:57:53
// Der Worker-Thread #14 wurde am 6.8.2019 15:58:09 unterbrochen
// Fertig. Drücken Sie zum Beenden ENTER.
Siehe auch
- class InterruptMonitor
- namensraum Aspose.Imaging.Multithreading
- Montage Aspose.Imaging