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
相关产品推荐
相关产品推荐

