Browse Source

Introduce StartupEventArgs and ExitEventArgs

pull/2442/head
Benedikt Schroeder 7 years ago
parent
commit
1bb3156950
  1. 3
      samples/BindingDemo/App.xaml.cs
  2. 13
      samples/ControlCatalog.NetCore/Program.cs
  3. 10
      samples/ControlCatalog/App.xaml.cs
  4. 3
      samples/PlatformSanityChecks/App.xaml.cs
  5. 5
      samples/Previewer/App.xaml.cs
  6. 3
      samples/RenderDemo/App.xaml.cs
  7. 3
      samples/VirtualizationDemo/App.xaml.cs
  8. 3
      samples/interop/Direct3DInteropSample/App.paml.cs
  9. 1
      src/Avalonia.Controls/AppBuilderBase.cs
  10. 43
      src/Avalonia.Controls/Application.cs
  11. 12
      src/Avalonia.Controls/IApplicationLifecycle.cs
  12. 12
      src/Avalonia.Styling/Controls/ExitEventArgs.cs
  13. 30
      src/Avalonia.Styling/Controls/StartupEventArgs.cs
  14. 8
      tests/Avalonia.DesignerSupport.TestApp/App.xaml.cs

3
samples/BindingDemo/App.xaml.cs

@ -3,13 +3,12 @@ using Avalonia;
using Avalonia.Controls;
using Avalonia.Logging.Serilog;
using Avalonia.Markup.Xaml;
using Serilog;
namespace BindingDemo
{
public class App : Application
{
public override void Initialize()
protected override void OnStartup(StartupEventArgs e)
{
AvaloniaXamlLoader.Load(this);
}

13
samples/ControlCatalog.NetCore/Program.cs

@ -3,13 +3,11 @@ using System.Diagnostics;
using System.Linq;
using System.Threading;
using Avalonia;
using Avalonia.Skia;
namespace ControlCatalog.NetCore
{
static class Program
{
{
static void Main(string[] args)
{
Thread.CurrentThread.TrySetApartmentState(ApartmentState.STA);
@ -28,15 +26,10 @@ namespace ControlCatalog.NetCore
AppBuilder.Configure<App>().InitializeWithLinuxFramebuffer(tl =>
{
tl.Content = new MainView();
System.Threading.ThreadPool.QueueUserWorkItem(_ => ConsoleSilencer());
ThreadPool.QueueUserWorkItem(_ => ConsoleSilencer());
});
else
BuildAvaloniaApp().Start(AppMain, args);
}
static void AppMain(Application app, string[] args)
{
app.Run();
BuildAvaloniaApp().Start();
}
/// <summary>

10
samples/ControlCatalog/App.xaml.cs

@ -1,18 +1,16 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace ControlCatalog
{
public class App : Application
{
public override void Initialize()
protected override void OnStartup(StartupEventArgs e)
{
AvaloniaXamlLoader.Load(this);
}
base.OnStartup(e);
protected override void OnStartup()
{
base.OnStartup();
AvaloniaXamlLoader.Load(this);
var mainWindow = new MainWindow();

3
samples/PlatformSanityChecks/App.xaml.cs

@ -1,11 +1,12 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace PlatformSanityChecks
{
public class App : Application
{
public override void Initialize()
protected override void OnStartup(StartupEventArgs e)
{
AvaloniaXamlLoader.Load(this);
}

5
samples/Previewer/App.xaml.cs

@ -1,14 +1,15 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Previewer
{
public class App : Application
{
public override void Initialize()
protected override void OnStartup(StartupEventArgs e)
{
AvaloniaXamlLoader.Load(this);
}
}
}
}

3
samples/RenderDemo/App.xaml.cs

@ -2,6 +2,7 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using Avalonia;
using Avalonia.Controls;
using Avalonia.Logging.Serilog;
using Avalonia.Markup.Xaml;
@ -9,7 +10,7 @@ namespace RenderDemo
{
public class App : Application
{
public override void Initialize()
protected override void OnStartup(StartupEventArgs e)
{
AvaloniaXamlLoader.Load(this);
}

3
samples/VirtualizationDemo/App.xaml.cs

@ -2,13 +2,14 @@
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace VirtualizationDemo
{
public class App : Application
{
public override void Initialize()
protected override void OnStartup(StartupEventArgs e)
{
AvaloniaXamlLoader.Load(this);
}

3
samples/interop/Direct3DInteropSample/App.paml.cs

@ -1,11 +1,12 @@
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Direct3DInteropSample
{
public class App : Application
{
public override void Initialize()
protected override void OnStartup(StartupEventArgs e)
{
AvaloniaXamlLoader.Load(this);
}

1
src/Avalonia.Controls/AppBuilderBase.cs

@ -292,7 +292,6 @@ namespace Avalonia.Controls
WindowingSubsystemInitializer();
RenderingSubsystemInitializer();
Instance.RegisterServices();
Instance.Initialize();
AfterSetupCallback(Self);
}
}

43
src/Avalonia.Controls/Application.cs

@ -55,10 +55,10 @@ namespace Avalonia
}
/// <inheritdoc/>
public event EventHandler Startup;
public event EventHandler<StartupEventArgs> Startup;
/// <inheritdoc/>
public event EventHandler Exit;
public event EventHandler<ExitEventArgs> Exit;
/// <inheritdoc/>
public event EventHandler<ResourcesChangedEventArgs> ResourcesChanged;
@ -199,14 +199,7 @@ namespace Avalonia
/// <value>
/// <c>true</c> if this instance is shutting down; otherwise, <c>false</c>.
/// </value>
internal bool IsShuttingDown { get; set; }
/// <summary>
/// Initializes the application by loading XAML etc.
/// </summary>
public virtual void Initialize()
{
}
internal bool IsShuttingDown { get; private set; }
public void Run()
{
@ -217,7 +210,7 @@ namespace Avalonia
_mainLoopCancellationTokenSource = new CancellationTokenSource();
Dispatcher.UIThread.Post(OnStartup, DispatcherPriority.Send);
Dispatcher.UIThread.Post(() => OnStartup(new StartupEventArgs()), DispatcherPriority.Send);
Run(_mainLoopCancellationTokenSource.Token);
}
@ -233,7 +226,7 @@ namespace Avalonia
// Make sure we call OnExit in case an error happened and OnExit() wasn't called explicitly
if (!IsShuttingDown)
{
OnExit();
OnExit(new ExitEventArgs());
}
}
@ -248,10 +241,10 @@ namespace Avalonia
throw new Exception("Run should only called once");
}
closable.Closed += (s, e) => OnExit();
_mainLoopCancellationTokenSource = new CancellationTokenSource();
closable.Closed += (s, e) => _mainLoopCancellationTokenSource?.Cancel();
Run(_mainLoopCancellationTokenSource.Token);
}
@ -284,26 +277,34 @@ namespace Avalonia
Run(_mainLoopCancellationTokenSource.Token);
}
protected virtual void OnStartup()
protected virtual void OnStartup(StartupEventArgs e)
{
Startup?.Invoke(this, EventArgs.Empty);
Startup?.Invoke(this, e);
}
protected virtual void OnExit()
protected virtual void OnExit(ExitEventArgs e)
{
Exit?.Invoke(this, EventArgs.Empty);
Exit?.Invoke(this, e);
Environment.ExitCode = e.ApplicationExitCode;
}
/// <inheritdoc/>
public void Shutdown()
{
Shutdown(0);
}
/// <inheritdoc/>
public void Shutdown(int exitCode)
{
IsShuttingDown = true;
Windows.Clear();
_mainLoopCancellationTokenSource?.Cancel();
OnExit(new ExitEventArgs { ApplicationExitCode = exitCode });
OnExit();
_mainLoopCancellationTokenSource?.Cancel();
}
/// <inheritdoc/>
@ -314,8 +315,6 @@ namespace Avalonia
Styles.TryGetResource(key, out value);
}
/// <summary>
/// Register's the services needed by Avalonia.
/// </summary>

12
src/Avalonia.Controls/IApplicationLifecycle.cs

@ -10,16 +10,22 @@ namespace Avalonia.Controls
/// <summary>
/// Sent when the application is starting up.
/// </summary>
event EventHandler Startup;
event EventHandler<StartupEventArgs> Startup;
/// <summary>
/// Sent when the application is exiting.
/// </summary>
event EventHandler Exit;
event EventHandler<ExitEventArgs> Exit;
/// <summary>
/// Exits the application.
/// Shuts down an application that returns the specified exit code to the operating system.
/// </summary>
void Shutdown();
/// <summary>
/// Shuts down an application that returns the specified exit code to the operating system.
/// </summary>
/// <param name="exitCode">An integer exit code for an application. The default exit code is 0.</param>
void Shutdown(int exitCode);
}
}

12
src/Avalonia.Styling/Controls/ExitEventArgs.cs

@ -0,0 +1,12 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
namespace Avalonia.Controls
{
public class ExitEventArgs : EventArgs
{
public int ApplicationExitCode { get; set; }
}
}

30
src/Avalonia.Styling/Controls/StartupEventArgs.cs

@ -0,0 +1,30 @@
// Copyright (c) The Avalonia Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
using System;
using System.Collections.Generic;
using System.Linq;
namespace Avalonia.Controls
{
public class StartupEventArgs : EventArgs
{
private string[] _args;
public IReadOnlyList<string> Args => _args ?? (_args = GetArgs());
private static string[] GetArgs()
{
try
{
var args = Environment.GetCommandLineArgs();
return args.Length > 1 ? args.Skip(1).ToArray() : new string[0];
}
catch (NotSupportedException)
{
return new string[0];
}
}
}
}

8
tests/Avalonia.DesignerSupport.TestApp/App.xaml.cs

@ -1,15 +1,11 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
namespace Avalonia.DesignerSupport.TestApp
{
public class App : Application
{
public override void Initialize()
protected override void OnStartup(StartupEventArgs e)
{
AvaloniaXamlLoader.Load(this);
}

Loading…
Cancel
Save