如何在UWP主应用中接收应用服务的任务完成通知?
解决UWP应用服务任务完成后通知主应用的问题
不需要额外注册应用服务为后台任务
应用服务本身就是一种特殊的进程外后台任务类型,只要你已经在应用清单中正确配置了其名称和入口点,就无需再通过后台任务注册API额外注册。BackgroundTaskRegistration.AllTasks为空是正常现象——应用服务并不属于常规后台任务范畴,所以不会出现在这个集合里。
正确实现任务完成通知的方式
由于进程外应用服务和主应用分属不同进程,静态事件/跨进程事件处理机制无法生效(这就是你遇到事件处理程序为null的原因)。你需要利用UWP应用服务自带的请求-响应机制来实现通知:
1. 后台服务端(Windows Runtime组件)处理完请求后返回响应
在OnRequestReceived方法执行完成时,通过AppServiceRequestReceivedEventArgs中的Request对象发送响应消息给主应用:
private async void OnRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args) { // 执行你的业务逻辑 // ... // 准备响应数据,告知主应用任务已完成 var response = new ValueSet(); response.Add("TaskStatus", "Completed"); response.Add("TaskResult", "你的处理结果"); // 发送响应 await args.Request.SendResponseAsync(response); }
2. 主应用端接收响应
主应用在发送请求时,通过SendMessageAsync的返回值获取后台服务的响应,以此确认任务完成:
// 假设_appServiceConnection是已建立好的AppServiceConnection实例 private async void TriggerServiceTask() { var request = new ValueSet(); request.Add("Command", "ExecuteTask"); // 发送请求并等待响应 var responseResult = await _appServiceConnection.SendMessageAsync(request); if (responseResult.Status == AppServiceResponseStatus.Success) { // 任务已完成,处理响应数据 string status = responseResult.Message["TaskStatus"].ToString(); string result = responseResult.Message["TaskResult"].ToString(); // 这里更新主应用UI或执行后续逻辑 } }
如果需要后台服务主动向主应用推送消息(而非仅响应请求),还可以在主应用的AppServiceConnection实例上订阅RequestReceived事件,后台服务通过AppServiceConnection.SendMessageAsync主动发送消息即可。
内容的提问来源于stack exchange,提问作者demonplus
相关产品推荐
相关产品推荐

