我从 UWP 应用程序启动此后台任务:
namespace Background.UWP
{
public sealed class BackgroundTask : IBackgroundTask
{
private WatchLoop _watchLoop;
public void Run(IBackgroundTaskInstance taskInstance)
{
ApplicationTriggerDetails details = taskInstance.TriggerDetails as ApplicationTriggerDetails;
var arg = details.Arguments["MyArg"].ToString();
// Start a loop that periodically does some checks
// and, if necessary, displays a toast with button "Show Details".
_watchLoop = new WatchLoop(arg, new ToastNotification());
_watchLoop.Start();
}
}
}
ToastNotification类定义如下:
namespace Background.UWP
{
internal class ToastNotification : IToastNotification
{
public bool Show(string message)
{
var button = new ToastButton()
.SetContent("Anzeigen")
.AddArgument("action", "reply")
.SetBackgroundActivation();
var toast = new ToastContentBuilder();
toast.AddArgument("action", "viewConversation")
.AddArgument("conversationId", 9813)
.AddText(message)
.AddButton(button);
toast.Show();
return false;
}
}
}
在我的
WhatchLoop
代码中的某个地方我调用方法Show();
现在不知道在哪里注册
button
的点击事件。 这里我发现我必须在OnActivated
中实现App.xaml.cs
。不过,因为toast是后台任务显示的,所以我没有App.xaml.cs
。
我该怎么办?
编辑:
BackgroundTask
在单独的 Windows 运行时组件中运行。
我找到了一个适合我目的的简单解决方案:
只需添加这些行:
Uri uri = new Uri("myapp://<application>");
button.SetProtocolActivation(uri);
我唯一需要弄清楚的是