You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 06:28:31