Usar notificações de aplicativo com um aplicativo WinForms

Uma notificação de aplicativo é um pop-up de interface do usuário que aparece fora da janela do aplicativo, fornecendo informações ou ações oportunas ao usuário. As notificações podem ser puramente informativas, podem iniciar seu aplicativo quando clicadas ou podem disparar uma ação em segundo plano sem colocar seu aplicativo em primeiro plano.

Captura de tela de uma notificação do aplicativo

Este artigo orienta você pelas etapas para criar e enviar uma notificação de aplicativo de um aplicativo WinForms e, em seguida, manipular a ativação quando o usuário interagir com ele. Este artigo usa as APIs SDK do Aplicativo WindowsMicrosoft.Windows.AppNotifications.

Para obter uma visão geral das notificações do aplicativo e das diretrizes para outras estruturas, consulte a visão geral das notificações do aplicativo.

Este artigo aborda as notificações locais. Para obter informações sobre como fornecer notificações de um serviço de nuvem, consulte as notificações por push.

Importante

No momento, não há suporte para notificações para aplicativos com privilégios elevados (administrador).

Pré-requisitos

  • Uma aplicação WinForms destinada ao .NET 6 ou posterior
  • O pacote NuGet SDK do Aplicativo Windows (Microsoft.WindowsAppSDK)

Configure seu projeto

No arquivo de projeto (.csproj), verifique se o TargetFramework inclui uma estrutura de destino Windows:

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

Adicione o pacote NuGet SDK do Aplicativo Windows:

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

Para aplicativos não empacotados, adicione:

<WindowsPackageType>None</WindowsPackageType>

Registrar-se para notificações de aplicativo

In Program.cs, inscreva-se para receber notificações antes de chamar Application.Run(). Você deve registrar seu manipulador NotificationInvoked antes de chamar Registrar.

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".
        });
    }
}

Observação

Para aplicativos não empacotados, Register() configura automaticamente o registro do servidor COM que permite que Windows inicie seu aplicativo quando uma notificação é clicada. Você não precisa configurar a ativação COM ou um AUMID manualmente.

Enviar uma notificação do aplicativo

Use AppNotificationBuilder para construir o conteúdo da notificação e AppNotificationManager.Show para enviar uma notificação do seu formulário.

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);
}

Para obter informações sobre como adicionar botões, imagens, entradas e outros conteúdos avançados às notificações, consulte o conteúdo da notificação do aplicativo.

Configuração do aplicativo em pacote

Para aplicativos WinForms não empacotados, Register() manipula o registro COM automaticamente. Para aplicativos empacotados (MSIX), você precisa adicionar extensões ao seu Package.appxmanifest. Consulte Configuração de aplicativo empacotado no artigo WPF para as entradas de manifesto necessárias.