Använda appaviseringar med en WinForms-app

Ett appmeddelande är ett popup-fönster för användargränssnittet som visas utanför appens fönster och som levererar information eller åtgärder i tid till användaren. Meddelanden kan vara rent informationsbaserade, kan starta din app när du klickar eller utlösa en bakgrundsåtgärd utan att föra din app till förgrunden.

Skärmbild av ett appmeddelande

Den här artikeln beskriver stegen för att skapa och skicka ett appmeddelande från en WinForms-app och sedan hantera aktivering när användaren interagerar med den. I den här artikeln används API:erna Windows App SDKMicrosoft.Windows.AppNotifications.

En översikt över appmeddelanden och vägledning för andra ramverk finns i Översikt över appaviseringar.

Den här artikeln beskriver lokala meddelanden. Information om hur du levererar meddelanden från en molntjänst finns i Push-meddelanden.

Viktigt!

Meddelanden för upphöjda appar (administratör) stöds inte för närvarande.

Förutsättningar

  • En WinForms-app som riktar sig till .NET 6 eller senare
  • NuGet-paketet Windows App SDK (Microsoft.WindowsAppSDK)

Konfigurera projektet

Kontrollera att .csproj innehåller ett Windows målramverk i projektfilen (TargetFramework):

<TargetFramework>net9.0-windows10.0.19041.0</TargetFramework>

Lägg till Windows App SDK NuGet-paketet:

<PackageReference Include="Microsoft.WindowsAppSDK" Version="1.7.250310001" />

För unpackade appar, lägg till:

<WindowsPackageType>None</WindowsPackageType>

Registrera dig för appmeddelanden

I Program.csregistrerar du dig för meddelanden innan du anropar Application.Run(). Du måste registrera din NotificationInvoked-hanterare innan du anropar Registrera.

Program.cs

using Microsoft.Windows.AppNotifications;

namespace WinFormsNotifications;

static class Program
{
    [STAThread]
    static void Main()
    {
        // Register the notification handler before calling Register
        AppNotificationManager.Default.NotificationInvoked += OnNotificationInvoked;
        AppNotificationManager.Default.Register();

        ApplicationConfiguration.Initialize();
        Application.Run(new Form1());

        // Unregister when the app exits
        AppNotificationManager.Default.Unregister();
    }

    private static void OnNotificationInvoked(
        AppNotificationManager sender,
        AppNotificationActivatedEventArgs args)
    {
        // NotificationInvoked is raised on a background thread,
        // so use Control.Invoke to marshal to the UI thread
        var form = Application.OpenForms.Count > 0 
            ? Application.OpenForms[0] as Form1 
            : null;

        form?.Invoke(() =>
        {
            // Parse args.Argument to determine what action to take.
            // args.Argument contains the arguments from the notification
            // or button that was clicked, as key=value pairs separated
            // by '&', for example "action=reply&conversationId=9813".
        });
    }
}

Anmärkning

För opaketerade appar konfigurerar Register() automatiskt COM-serverregistreringen som tillåter Windows att starta appen när ett meddelande klickas. Du behöver inte konfigurera COM-aktivering eller AUMID manuellt.

Skicka ett appmeddelande

Använd AppNotificationBuilder för att skapa meddelandeinnehåll och AppNotificationManager.Show för att skicka ett meddelande från formuläret.

Form1.cs

using Microsoft.Windows.AppNotifications;
using Microsoft.Windows.AppNotifications.Builder;

private void SendNotification()
{
    var notification = new AppNotificationBuilder()
        .AddArgument("action", "viewConversation")
        .AddArgument("conversationId", "9813")
        .AddText("Andrew sent you a picture")
        .AddText("Check this out, The Enchantments in Washington!")
        .BuildNotification();

    AppNotificationManager.Default.Show(notification);
}

Information om hur du lägger till knappar, bilder, indata och annat innehållsrikt innehåll i dina meddelanden finns i Appaviseringsinnehåll.

Installation av paketerad app

För uppackade WinForms-appar, Register() hanterar COM-registrering automatiskt. För paketerade appar (MSIX) måste du lägga till tillägg i din Package.appxmanifest. Se Packaged app setup i artikeln WPF för de nödvändiga manifestposterna.