首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >UWP与AppService及期刊更新

UWP与AppService及期刊更新
EN

Stack Overflow用户
提问于 2017-09-15 05:37:45
回答 1查看 218关注 0票数 0

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

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

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

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

更新

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

代码语言:javascript
运行
复制
    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();
    }

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

代码语言:javascript
运行
复制
    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());
            });

它像预期的那样工作,但是我想把计时器从主应用移到应用服务,这是可能的吗?

非常感谢

EN

回答 1

Stack Overflow用户

发布于 2017-09-15 06:24:05

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

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

可以帮助您的示例代码以msdn的形式提供

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46228609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档