从后台任务中在 ToastButton 上设置事件

问题描述 投票:0回答:1

我从 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 运行时组件中运行。

c# uwp toast background-task clickevent
1个回答
0
投票

我找到了一个适合我目的的简单解决方案:

只需添加这些行:

Uri uri = new Uri("myapp://<application>");
button.SetProtocolActivation(uri);

我唯一需要弄清楚的是 URL 是如何形成的。

© www.soinside.com 2019 - 2024. All rights reserved.