我是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());
});
它按预期工作,但我想将计时器从主应用程序移动到应用程序服务,是否可能?
非常感谢
答案 0 :(得分:0)
您可以考虑使用事件。 Window Runtime Component
应声明类似UpdateGUI
的事件。您应该在主应用程序中订阅该事件。
现在使用task
定期使用适当的参数引发事件。
可以帮助您的示例代码以msdn
提供