You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中通过Microsoft.Toolkit.Uwp.Notifications.dll管理Toast通知生命周期与删除

解决方案

核心要点

  • ToastNotificationManagerCompat是静态类,不能通过Activator.CreateInstance实例化,直接调用其静态方法即可。
  • 要设置通知生命周期、手动删除通知,关键是获取ToastNotification实例并操作其属性,或调用静态管理方法。

1. 设置通知1分钟后自动过期

通过反射生成通知内容后,获取ToastNotification实例并设置ExpirationTime属性,再通过静态类方法显示通知,即可实现自动过期效果。

示例代码:

// 加载目标程序集
Assembly toolkitAssembly = Assembly.Load("Microsoft.Toolkit.Uwp.Notifications");

// 创建ToastContentBuilder实例并添加内容
Type toastContentBuilderType = toolkitAssembly.GetType("Microsoft.Toolkit.Uwp.Notifications.ToastContentBuilder");
dynamic builder = Activator.CreateInstance(toastContentBuilderType);
builder.AddText("测试通知");
builder.AddText("1分钟后自动从屏幕和通知中心消失");

// 获取ToastContent对象
dynamic toastContent = builder.GetToastContent();

// 创建ToastNotification实例并设置过期时间
Type toastNotificationType = toolkitAssembly.GetType("Microsoft.Toolkit.Uwp.Notifications.ToastNotification");
dynamic toastNotification = Activator.CreateInstance(toastNotificationType, toastContent);
toastNotification.ExpirationTime = DateTime.Now.AddMinutes(1);

// 通过静态类显示通知
Type toastManagerCompatType = toolkitAssembly.GetType("Microsoft.Toolkit.Uwp.Notifications.ToastNotificationManagerCompat");
toastManagerCompatType.InvokeMember(
    "Show",
    BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,
    null,
    null,
    new object[] { toastNotification });

2. 手动删除通知中心的未激活通知

给通知设置唯一Tag标识,之后调用静态方法RemoveFromNotificationCenter即可指定删除目标通知。

示例代码(基于上述代码扩展):

// 创建通知时设置唯一Tag
string notificationTag = "TestToast_001";
toastNotification.Tag = notificationTag;

// 显示通知(代码同上)
toastManagerCompatType.InvokeMember(
    "Show",
    BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,
    null,
    null,
    new object[] { toastNotification });

// 示例:30秒后主动删除该通知
System.Timers.Timer deleteTimer = new System.Timers.Timer(30000);
deleteTimer.Elapsed += (sender, e) =>
{
    toastManagerCompatType.InvokeMember(
        "RemoveFromNotificationCenter",
        BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static,
        null,
        null,
        new object[] { notificationTag });
    deleteTimer.Stop();
};
deleteTimer.Start();

常见问题说明

  • 实例化ToastNotificationManagerCompat报错的原因:它是静态类,所有功能都通过静态方法提供,不需要创建实例。
  • 过期通知的自动处理:设置ExpirationTime后,系统会在时间到达时自动将通知从屏幕和通知中心移除,无需手动干预。

内容的提问来源于stack exchange,提问作者Arkady Kornienko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:13:16