using System.Threading; namespace NAPS2.Operation; /// /// A representation of a long-running operation with progress reporting and cancellation. /// public interface IOperation { string? ProgressTitle { get; } bool AllowCancel { get; } bool AllowBackground { get; } bool SkipExitPrompt { get; } OperationStatus? Status { get; } Task? Success { get; } bool IsFinished { get; } void Wait(CancellationToken cancelToken = default); void Cancel(); event EventHandler StatusChanged; event EventHandler Finished; event EventHandler Error; }