Vorschaudateien in einer WPF-Anwendung aufräumen

Click here for the English article.

Problem

Bei Verwendung des EnhancedViewerControl in einer WPF-Anwendung werden die erzeugten Vorschaudateien (*.LL) im temporären Verzeichnis nach dem Schließen des Vorschaufensters nicht automatisch gelöscht.

Lösung

Das EnhancedViewerControl stellt über die Eigenschaft PreviewControl Zugriff auf das gekapselte Vorschau-Control bereit. Dort kann über die Eigenschaft CloseMode eingestellt werden, dass die temporäre Vorschaudatei beim Schließen automatisch gelöscht wird.

Wichtig ist dabei das Timing: Der CloseMode muss bereits vor dem Zuweisen des PreviewControls an List & Label gesetzt werden:

enhancedViewerControl.PreviewControl.CloseMode =
    LlPreviewControlCloseMode.DeleteFile;

LL.PreviewControl = enhancedViewerControl.PreviewControl;

In der .NET-Hilfe finden sich weitere Informationen zu den möglichen Werten von LlPreviewControlCloseMode.

Alternative Lösung über die API

Falls das automatische Löschen über den CloseMode nicht verwendet werden kann, lassen sich die Vorschaudateien auch explizit über die API entfernen.

Zunächst wird der temporäre Pfad festgelegt:

private string _projectName;
private string _projectExt;
private string _previewPath = Path.GetTempPath() + "\\";

Vor dem Druckaufruf wird der Preview-Temp-Pfad gesetzt:

_projectName = "Unterberichte und Relationen";
_projectExt = ".lsr";

string projectFile = _projectName + _projectExt;

LL.Core.LlPreviewSetTempPath(_previewPath);

Nach dem Schließen des Fensters kann die erzeugte .LL-Datei explizit gelöscht werden:

private void Window_Closed(object sender, EventArgs e)
{
    enhancedPreviewControl.Dispose();

    string projectFile = _projectName + ".LL";
    LL.Core.LlPreviewDeleteFiles(projectFile, _previewPath);

    LL.Dispose();
}

Diese Variante hat den Nachteil, dass der jeweilige Projektname bekannt bzw. separat ermittelt werden muss, damit LlPreviewDeleteFiles die zugehörigen Vorschaudateien löschen kann.