diff --git a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs
index 536e39cc34..8006149ee9 100644
--- a/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs
+++ b/src/Avalonia.Controls/ApplicationLifetimes/ClassicDesktopStyleApplicationLifetime.cs
@@ -83,7 +83,12 @@ namespace Avalonia.Controls.ApplicationLifetimes
public void Shutdown(int exitCode = 0)
{
- DoShutdown(new ShutdownRequestedEventArgs(), exitCode);
+ DoShutdown(new ShutdownRequestedEventArgs(), true, exitCode);
+ }
+
+ public bool TryShutdown(int exitCode = 0)
+ {
+ return DoShutdown(new ShutdownRequestedEventArgs(), false, exitCode);
}
public int Start(string[] args)
@@ -126,12 +131,12 @@ namespace Avalonia.Controls.ApplicationLifetimes
_activeLifetime = null;
}
- private void DoShutdown(ShutdownRequestedEventArgs e, int exitCode = 0)
+ private bool DoShutdown(ShutdownRequestedEventArgs e, bool force = false, int exitCode = 0)
{
ShutdownRequested?.Invoke(this, e);
if (e.Cancel)
- return;
+ false;
if (_isShuttingDown)
throw new InvalidOperationException("Application is already shutting down.");
@@ -155,7 +160,7 @@ namespace Avalonia.Controls.ApplicationLifetimes
if (Windows.Count > 0)
{
e.Cancel = true;
- return;
+ return false;
}
var e = new ControlledApplicationLifetimeExitEventArgs(exitCode);
@@ -168,6 +173,8 @@ namespace Avalonia.Controls.ApplicationLifetimes
_cts = null;
_isShuttingDown = false;
}
+
+ return true;
}
private void OnShutdownRequested(object sender, ShutdownRequestedEventArgs e) => DoShutdown(e);
diff --git a/src/Avalonia.Controls/ApplicationLifetimes/IClassicDesktopStyleApplicationLifetime.cs b/src/Avalonia.Controls/ApplicationLifetimes/IClassicDesktopStyleApplicationLifetime.cs
index a70d5dd2f1..a83229b732 100644
--- a/src/Avalonia.Controls/ApplicationLifetimes/IClassicDesktopStyleApplicationLifetime.cs
+++ b/src/Avalonia.Controls/ApplicationLifetimes/IClassicDesktopStyleApplicationLifetime.cs
@@ -9,6 +9,12 @@ namespace Avalonia.Controls.ApplicationLifetimes
///
public interface IClassicDesktopStyleApplicationLifetime : IControlledApplicationLifetime
{
+ ///
+ /// Tries to Shutdown the application. event can be used to cancel the shutdown.
+ ///
+ /// An integer exit code for an application. The default exit code is 0.
+ bool TryShutdown(int exitCode = 0);
+
///
/// Gets the arguments passed to the
///