UWP与AppService和定期更新

时间:2017-09-14 21:37:45

标签: c# uwp

我是c#和uwp的新手,目前我正在开发一个简单的应用来试用UWP中的应用服务。

我想要做的是创建一个带有UI和一些逻辑的UWP应用程序,然后连接到应用程序服务(Windows运行时组件),我生成一个数字。然后,此数字将显示在UI上。它工作正常,但我想通过定期更新扩展这个例子 - 我想定期更改这个数字(例如每五秒)。

我正在寻求帮助如何做到这一点。我可以使用计时器定期向应用服务发送消息,并接收带有新号码的响应。但实际上我并不喜欢这种方法。

相反,我想直接在app服务中使用计时器,只是定期在主应用程序中收到响应。有可能吗?

更新

这是AppService中的方法,它生成随机数并将响应发送到主应用程序。

    private async void AppServiceConnection_RequestReceivedAsync(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
    {
        var deferral = args.GetDeferral();
        var requestMessage = args.Request.Message;
        var responseMessage = new ValueSet();
        var tasks = new List<Task>();

        foreach (var item in requestMessage)
        {
            if (item.Value.ToString() == "k")
            {
                var task1 = Task.Run(() =>
                {
                    responseMessage.Add(item.Value.ToString(), rand.NextDouble().ToString());
                });
                tasks.Add(task1);
            }

            if (item.Value.ToString() == "k2")
            {
                var task2 = Task.Run(() =>
                {
                        responseMessage.Add(item.Value.ToString(), rand.NextDouble().ToString());
                });
                tasks.Add(task2);
            }
        }

        Task.WaitAll(tasks.ToArray());
        await args.Request.SendResponseAsync(responseMessage);

        deferral.Complete();
    }

这是主应用程序中的方法,它定期向应用服务发送消息。

    private async void timerCallback(object state)
    {
        appServiceConnection = new AppServiceConnection
        {
            AppServiceName = "...",
            PackageFamilyName = "...";
        };

        var status = await appServiceConnection.OpenAsync();
        switch (status)
        {
            default:
                break;
        }

        var message = new ValueSet();
        message.Add("0", "k");
        message.Add("1", "k2");

        var response = await appServiceConnection.SendMessageAsync(message);
        switch (response.Status)
        {
            default:
                break;
        }

        await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.High,
            () => {
                randomNumbersString = string.Format("Task1: {0} \nTask2: {1}",
                    response.Message.Where((x) => x.Key == "k").First().Value.ToString(),
                    response.Message.Where((x) => x.Key == "k2").First().Value.ToString());
            });

它按预期工作,但我想将计时器从主应用程序移动到应用程序服务,是否可能?

非常感谢

1 个答案:

答案 0 :(得分:0)

您可以考虑使用事件。 Window Runtime Component应声明类似UpdateGUI的事件。您应该在主应用程序中订阅该事件。

现在使用task定期使用适当的参数引发事件。

可以帮助您的示例代码以msdn

提供