适用于 Windows 10 的通用应用程序。如何触发后台任务?

Posted

技术标签:

【中文标题】适用于 Windows 10 的通用应用程序。如何触发后台任务?【英文标题】:Universal app for windows 10. how to trigger background task? 【发布时间】:2015-11-20 20:20:38 【问题描述】:

我需要通过按下操作按钮从交互式 toast 通知触发后台任务。我不知道我做错了什么。我能够注册一个任务并在视觉工作室中看到它。即使我可以调试它(调试器跳转到 MyToastNotificationBackgroundTask.Run 函数,但参数 IBackgroundTaskInstance taskInstance 是空对象),单击按钮永远不会运行任务,或者至少调试器不显示它。

我正在注册这样的后台任务

var builder = new BackgroundTaskBuilder();
builder.Name = "MyToastNotificationBackgroundTask";
builder.TaskEntryPoint = "Tasks.MyToastNotificationBackgroundTask";
builder.SetTrigger(new ToastNotificationActionTrigger());
BackgroundTaskRegistration task = builder.Register();

显示通知

ToastNotifier toastNotifier = ToastNotificationManager.CreateToastNotifier();
ScheduledToastNotification myToastNotificaton = new ScheduledToastNotification(this.myToastXml, DateTime.Now.AddMinutes(1), TimeSpan.FromMinutes(60), 2);
myToastNotificaton .Id = "toast_54ahk36s";
toastNotifier.AddToSchedule(myToastNotificaton);

在应用清单中

<Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="Tasks.MyToastNotificationBackgroundTask">
      <BackgroundTasks>
        <Task Type="systemEvent" />
      </BackgroundTasks>
    </Extension>
</Extensions>

在 toast 模板 xml 中的操作按钮是

<actions>
    <input id="message" type="text" placeholderContent="200" />
    <action activationType="background" content="Count" arguments="count" />
</actions>

后台任务 itsetf

namespace Tasks

    public sealed class MyToastNotificationBackgroundTask : IBackgroundTask
    
        public void Run(IBackgroundTaskInstance taskInstance)
        
            var details = taskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
            ...
        
    

我不明白在通知模板操作按钮上指定 activationype="background" 与 MyToastNotificationBackgroundTask 任务有何关联?我找不到相关信息。

请有人分享您的知识。也许你有一个工作示例或 smf。任何帮助将不胜感激。提前致谢。

【问题讨论】:

【参考方案1】:

我不明白如何在 通知模板操作按钮与 MyToastNotificationBackgroundTask 任务?我找不到相关信息 那个。

后台任务的触发器类型 (ToastNotificationActionTrigger) 是将 Toast 操作连接到后台任务的原因。当用户点击该操作时,应用程序会查找触发 ToastNotificationActionTrigger 的后台任务,如果找到则运行。

我使用了您的代码,但无法重现问题,触发器工作正常。我的猜测是您已经使用该名称注册了一个任务,但没有正确的触发器类型(先尝试取消注册)-或者-您在 toast xml(activationType 字段)中有拼写问题。

【讨论】:

我猜你是对的。起初我想我正在使用 SystemTrigger (从示例中复制)。在我取消注册任务并再次注册后,一切正常!谢谢你帮了我很多!遗憾的是,我无法将您的答案标记为有用,因为我还没有获得 15 点声望点... 我被这个问题困扰了一段时间。请注意,除非您运行注册代码(在许多示例中,这放置在应用程序的 onLauched() 方法中),否则您对后台任务的注册将不会生效,这意味着您需要在前台运行一次应用程序在此注册发生之前。

以上是关于适用于 Windows 10 的通用应用程序。如何触发后台任务?的主要内容,如果未能解决你的问题,请参考以下文章

如何离线安装适用于 Windows 10 的 D3D11 SDK 层

如何支持适用于 iPhone、iPad 和 iPad Mini 的 iOS 应用程序

如何使用适用于 Chrome Windows 10 的 WebDriver 在 Eclipse (Java) 上安装 Selenium

UWP

适用于 Windows 8.1 的 Nvidia GeForce 驱动程序无法在 Windows 10 上运行 [关闭]

如何使用适用于 Windows 8 的 Visual Studio Express 2012 创建适用于 Windows XP 的应用程序