Hier müssten Sie dann ein WM_CLOSE an das Preview Fenster schicken, das Fenster könnte man mit der Windows Funktion FindWindow finden und das Handle beim SendMessage verwenden.
Das müssen Sie aber in einen eigenen Task packen, im Eventhandler dürfen Sie das Fenster nicht schließen, das wird dort noch gebraucht (weil es ja eben den Event geschickt hat).
Die Preview über ein SendMessage zu schließen, ist aber nicht der von uns empfohlene Weg, wenn Sie es dennoch umsetzen möchten finden Sie folgend ein kleines mögliches Codesnippets hierzu.
[DllImport("user32.dll", SetLastError = true)]
static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = false)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
static uint WM_CLOSE = 0x10;
async Task SendWithDelay()
{
// ich habe hier mal ein Delay eingefügt, gilt nur als Beispiel
await Task.Delay(8000);
//Handle der Vorschau ermitteln
IntPtr PreviewHandle = FindWindow("L&LViewer", null);
//Fenster schließen
if (!PreviewHandle.Equals(IntPtr.Zero))
SendMessage(PreviewHandle, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
}
private void button1_Click(object sender, EventArgs e)
{
Task t1 = SendWithDelay();
//Druck starten usw.
}
Hinweis:
Bei dieser Vorschau darf es sich jedoch nicht um das LL PreviewControl handeln, sondern muss ein eigenes Window mit einer Vorschau sein. Wenn es sich um ersteres handeln würde, dann würden man diesem PreviewControl über das ParentHandle sozusagen den Boden unter den Füßen wegziehen.