Use notificações de aplicação com uma aplicação WinForms

Uma notificação de aplicação é um pop-up na interface que aparece fora da janela da sua aplicação, fornecendo informações ou ações oportunas ao utilizador. As notificações podem ser puramente informativas, podem abrir a sua aplicação ao clicar, ou podem desencadear uma ação em segundo plano sem trazer a aplicação para o primeiro plano.

Captura de ecrã de uma notificação de aplicação

Este artigo explica-te os passos para criar e enviar uma notificação de aplicação a partir de uma aplicação WinForms e depois tratar da ativação quando o utilizador interagir com ela. Este artigo utiliza as APIs SDK de Aplicações WindowsMicrosoft.Windows.AppNotifications.

Para uma visão geral das notificações de aplicações e orientações para outros frameworks, consulte Visão geral das notificações de aplicações.

Este artigo aborda as notificações locais. Para informações sobre como entregar notificações a partir de um serviço na cloud, consulte Notificações Push.

Importante

As notificações para aplicações elevadas (de administrador) não são atualmente suportadas.

Pré-requisitos

  • Uma aplicação WinForms direcionada para .NET 6 ou versões posteriores
  • O pacote NuGet SDK de Aplicações Windows (Microsoft.WindowsAppSDK)

Configure o seu projeto

No ficheiro do teu projeto (.csproj), certifica-te de que o TargetFramework inclui um framework de Windows alvo:

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

Adicionar o pacote NuGet do SDK de Aplicações Windows:

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

Para aplicações não embaladas, adicione:

<WindowsPackageType>None</WindowsPackageType>

Registe-se para receber notificações de aplicações

No Program.cs, regista-te para receber notificações antes de ligar Application.Run(). Deve registar o seu NotificationInvoked handler antes de chamar Register.

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 aplicações não empacotadas, o Register() configura automaticamente o registo do servidor COM, que permite Windows iniciar a sua aplicação quando uma notificação é clicada. Não precisas de configurar manualmente a ativação do COM ou um AUMID.

Enviar uma notificação de aplicação

Use o AppNotificationBuilder para construir o conteúdo das notificações e o AppNotificationManager.Show para enviar uma notificação a partir 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 informações sobre como adicionar botões, imagens, entradas e outro conteúdo rico às suas notificações, consulte Conteúdo de notificações da aplicação.

Configuração de aplicação empacotada

Para aplicações WinForms não embaladas, Register() trata automaticamente do registo COM. Para aplicações empacotadas (MSIX), é necessário adicionar extensões ao seu Package.appxmanifest. Consulte Configuração de aplicação empacotada no artigo WPF para as entradas de manifesto necessárias.