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

WPF应用ToastContentBuilder初始化通知失败问题求助

异常原因分析与解决方案

原因分析

内部异常提示找不到Windows.UI.Notifications.ToastNotificationManager.get_History()方法,这个API是**Windows 10 1607(Anniversary Update,Build 14393)**及Windows Server 2016才正式引入的。客户的服务器环境大概率是以下情况之一:

  • Windows Server 2012 R2或更早版本
  • Windows 10 1511及以下版本

这类旧系统的UWP通知API中不存在ToastNotificationHistory相关方法,导致Microsoft.Toolkit.Uwp.Notifications库调用时触发MissingMethodException,最终被包装为InvalidOperationException抛出。

另外,你的ShowNotification方法中的空catch块未捕获到该异常,是因为AppDomain.UnhandledException捕获的是未被任何局部catch处理的异常——可能是库内部的异常抛出路径未被你的外层try包裹,或是异常被包装为RuntimeWrappedException导致未被普通catch捕获。

解决方案

1. 前置系统版本检查,兼容旧系统通知

在调用UWP通知前先判断系统版本,不支持时降级使用传统WPF气泡通知:

void ShowNotification(string text)
{
    try
    {
        var osVersion = Environment.OSVersion.Version;
        // Windows 10 1607及以上/Windows Server 2016及以上才支持目标API
        if (osVersion.Major >= 10 && osVersion.Build >= 14393)
        {
            new ToastContentBuilder().AddText(text).Show();
        }
        else
        {
            ShowLegacyBalloonNotification(text);
        }
    }
    catch (Exception ex)
    {
        // 建议记录异常日志,避免空吞异常导致排查困难
        // Logger.Error("通知展示失败", ex);
    }
}

// 传统WPF气泡通知实现
void ShowLegacyBalloonNotification(string text)
{
    using var notifyIcon = new System.Windows.Forms.NotifyIcon();
    notifyIcon.Icon = System.Drawing.Icon.ExtractAssociatedIcon(System.Windows.Forms.Application.ExecutablePath);
    notifyIcon.Visible = true;
    notifyIcon.BalloonTipText = text;
    notifyIcon.ShowBalloonTip(3000);
}

2. 降级Toolkit库版本

早期版本的Microsoft.Toolkit.Uwp.Notifications(如v6.x及之前)未依赖ToastNotificationHistory API,对旧系统兼容性更好。可尝试将NuGet包版本降级到v6.1.1或更早,避免调用不存在的API。

3. 完善异常捕获逻辑

确保捕获所有异常类型,包括MissingMethodException和RuntimeWrappedException,同时不要空吞异常,至少记录日志以便排查:

void ShowNotification(string text)
{
    try
    {
        new ToastContentBuilder().AddText(text).Show();
    }
    catch (Exception ex)
    {
        // 记录异常信息
        // Logger.Warn("UWP通知展示失败,将跳过通知", ex);
    }
}

4. 引导客户升级服务器系统

如果业务场景允许,建议客户将服务器升级到Windows Server 2016或更高版本,以原生支持完整的UWP通知功能。

内容的提问来源于stack exchange,提问作者Ja Da

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:35:16