Primary WinForms APIs:
Application.Run(...)ApplicationContextForm.Show(), Form.ShowDialog()Primary Avalonia APIs:
AppBuilder.StartWithClassicDesktopLifetime(args)IClassicDesktopStyleApplicationLifetimeWindow.Show(), Window.ShowDialog(owner)TopLevel service access (StorageProvider, Clipboard, Launcher)| WinForms | Avalonia |
|---|---|
Application.Run(new MainForm()) |
configure lifetime and assign MainWindow in App.OnFrameworkInitializationCompleted() |
ApplicationContext multi-window orchestration |
lifetime-managed window creation and event wiring |
| blocking modal call chain | async dialog flows with await ShowDialog(...) |
IClassicDesktopStyleApplicationLifetime as primary desktop lifetime.TopLevel instead of static global helpers.WinForms C#:
[STAThread]
static void Main()
{
ApplicationConfiguration.Initialize();
Application.Run(new MainForm());
}
Avalonia XAML (App.axaml):
<Application xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="MyApp.App">
<Application.Styles>
<FluentTheme />
</Application.Styles>
</Application>
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
internal static class Program
{
[STAThread]
public static void Main(string[] args) => BuildAvaloniaApp().StartWithClassicDesktopLifetime(args);
public static AppBuilder BuildAvaloniaApp()
=> AppBuilder.Configure<App>().UsePlatformDetect().LogToTrace();
}
public partial class App : Application
{
public override void OnFrameworkInitializationCompleted()
{
if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
desktop.MainWindow = new MainWindow();
base.OnFrameworkInitializationCompleted();
}
}
MainWindow is assigned.TopLevel-scoped services.