我是c#和UWP的新手,目前我正在开发一个简单的应用程序来尝试uwp中的应用程序服务。
我想要做的是创建一个带有UI和一些逻辑的UWP应用程序,然后连接到一个应用程序服务(Windows运行时组件),在那里我生成一个数字。然后,此数字将显示在UI上。它工作得很好,但是我想用周期性的更新来扩展这个例子--我想周期性地改变这个数字(例如,每五秒钟)。
我正在寻求一些如何做到这一点的帮助。我可以使用计时器定期向应用程序服务发送消息,并接收带有新号码的响应。但我实际上并不喜欢这种方法。
相反,我想直接在应用程序服务中使用计时器,并在主应用程序中定期接收响应。有可能吗?
更新
这是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());
            });它像预期的那样工作,但是我想把计时器从主应用移到应用服务,这是可能的吗?
非常感谢
发布于 2017-09-15 06:24:05
您可以考虑使用事件。Window Runtime Component应该声明类似于UpdateGUI的事件。您应该在主应用程序中订阅该事件。
现在使用task定期引发带有适当参数的事件。
可以帮助您的示例代码以msdn的形式提供
https://stackoverflow.com/questions/46228609
复制相似问题