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

