| File: System\Windows\Forms\Printing\PrintControllerWithStatusDialog.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Drawing; using System.Drawing.Printing; namespace System.Windows.Forms; public partial class PrintControllerWithStatusDialog : PrintController { private readonly PrintController _underlyingController; private PrintDocument? _document; private BackgroundThread? _backgroundThread; private int _pageNumber; private readonly string _dialogTitle; public PrintControllerWithStatusDialog(PrintController underlyingController) : this(underlyingController, SR.PrintControllerWithStatusDialog_DialogTitlePrint) { } public PrintControllerWithStatusDialog(PrintController underlyingController, string dialogTitle) { _underlyingController = underlyingController; _dialogTitle = dialogTitle; } public override bool IsPreview => _underlyingController?.IsPreview ?? false; /// <summary> /// Begins the control sequence that determines when and how to print a document. /// </summary> public override void OnStartPrint(PrintDocument document, PrintEventArgs e) { base.OnStartPrint(document, e); _document = document; _pageNumber = 1; if (SystemInformation.UserInteractive) { _backgroundThread = new BackgroundThread(this); // starts running & shows dialog automatically } try { _underlyingController.OnStartPrint(document, e); } catch { _backgroundThread?.Stop(); throw; } finally { if (_backgroundThread is not null && _backgroundThread._canceled) { e.Cancel = true; } } } /// <summary> /// Begins the control sequence that determines when and how to print a page of a document. /// </summary> public override Graphics? OnStartPage(PrintDocument document, PrintPageEventArgs e) { base.OnStartPage(document, e); _backgroundThread?.UpdateLabel(); Graphics? result = _underlyingController.OnStartPage(document, e); if (_backgroundThread is not null && _backgroundThread._canceled) { e.Cancel = true; } return result; } /// <summary> /// Completes the control sequence that determines when and how to print a page of a document. /// </summary> public override void OnEndPage(PrintDocument document, PrintPageEventArgs e) { _underlyingController.OnEndPage(document, e); if (_backgroundThread is not null && _backgroundThread._canceled) { e.Cancel = true; } _pageNumber++; base.OnEndPage(document, e); } /// <summary> /// Completes the control sequence that determines when and how to print a document. /// </summary> public override void OnEndPrint(PrintDocument document, PrintEventArgs e) { _underlyingController.OnEndPrint(document, e); if (_backgroundThread is not null && _backgroundThread._canceled) { e.Cancel = true; } _backgroundThread?.Stop(); base.OnEndPrint(document, e); } }