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

WPF应用定时通知开发咨询:离线时触发API调用并显示Toast

WPF定时通知方案(含应用未运行场景)

核心思路

WPF本身是桌面应用,未运行时无法自主执行逻辑,所以得结合本地调度(应用运行时)+ 系统级定时(应用未运行时),再配合Windows原生Toast能力来实现需求。


一、定时触发逻辑

1. 应用运行时:用Quartz.NET做本地调度

你之前研究的Quartz.NET完全适配这个场景,它能灵活处理每日、每周这类复杂定时规则:

  • 先把用户配置的时间转成Quartz的cron表达式:比如每日7:00对应0 0 7 * * ?,每周四14:00对应0 0 14 ? * THU
  • 初始化Quartz调度器,将「调用API+展示Toast」的逻辑封装成Job,绑定对应的Trigger
  • 注意:应用最小化到托盘时,不要销毁调度器,保持后台运行状态

2. 应用未运行时:用Windows任务计划程序

这是唯一能在应用未启动时触发逻辑的系统级方案:

  • 编写一个轻量的控制台程序(或者让WPF支持无窗口启动模式),专门处理「到点调用API+弹出Toast」的逻辑
  • 在WPF的设置界面中,用户保存定时配置时,自动创建/更新Windows任务计划:
    • 设置触发条件(选择每日/每周模式,指定具体时间)
    • 任务操作设为启动你的控制台程序(或者给WPF传递参数,让它启动时直接执行逻辑而不显示主窗口)
    • 权限配置要到位:至少允许用户登录时运行,若需无人值守可选择「不管用户是否登录都运行」(此选项需要管理员权限)

二、Toast通知实现

Windows 10及以上系统的原生Toast,无论应用是否运行都能正常弹出,无需依赖WPF界面:

通用代码实现(运行/未运行场景均可使用)

可以直接使用Windows.UI.Notifications命名空间的API,或者借助Microsoft.Toolkit.Uwp.Notifications NuGet包简化开发:

using Windows.UI.Notifications;
using Windows.Data.Xml.Dom;

public void ShowToast(string title, string content)
{
    // 加载Toast模板
    var toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);
    var textNodes = toastXml.GetElementsByTagName("text");
    textNodes[0].InnerText = title;
    textNodes[1].InnerText = content;

    // 可选:添加点击Toast打开应用的操作(需先给应用注册自定义协议)
    var actions = toastXml.CreateElement("actions");
    var openAction = toastXml.CreateElement("action");
    openAction.SetAttribute("content", "打开应用");
    openAction.SetAttribute("activationType", "protocol");
    openAction.SetAttribute("arguments", "yourapp://open"); // 自定义协议地址
    actions.AppendChild(openAction);
    toastXml.DocumentElement.AppendChild(actions);

    // 发送Toast通知
    var toast = new ToastNotification(toastXml);
    ToastNotificationManager.CreateToastNotifier("你的应用唯一ID").Show(toast);
}
  • 若要实现点击Toast启动应用,需给WPF应用注册自定义协议:可通过Package.appxmanifest配置,或手动修改注册表完成。

三、API调用逻辑

将API请求逻辑封装成独立类库,供WPF主程序和控制台程序共用,避免重复代码:

  • 编写ApiClient类,包含FetchDataAsync方法,处理HTTP请求、超时、错误重试等细节
  • 定时任务触发时,先调用该方法获取数据,再将数据内容传入Toast进行展示

四、配置持久化

用户设置的定时规则需要持久化存储到本地:

  • 可选择将配置写入AppData目录下的JSON文件,或写入注册表
  • 应用启动时读取配置,初始化Quartz调度;用户修改配置时,同步更新Quartz任务和Windows任务计划

内容的提问来源于stack exchange,提问作者May Nguyen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:10:28