XPackageGetInstallationProgress

返回安装的当前进度。

语法

void XPackageGetInstallationProgress(  
         XPackageInstallationMonitorHandle installationMonitor,  
         XPackageInstallationProgress* progress  
)  

参数

installationMonitor _In_
类型:XPackageInstallationMonitorHandle

安装监视器的句柄。

progress _Out_
类型:XPackageInstallationProgress*

在返回时,包含安装的当前进度。

返回值

类型:void

备注

要获取安装的当前进度,请调用 XPackageGetInstallationProgress;要获得安装期间所发生变化的通知,请注册回调。 您可以为整个软件包或特定的子集创建安装监视器。

在全新安装新内容的过程中,由于安装尚未完全启动,因此运行时无法计算包的总大小。 在这种情况下,运行时将返回 UINT64_MAX 作为 totalBytes 的值,并为所有其他字段返回零或 false。

示例:

void CALLBACK ProgressChangedCallback(
    void* /* context*/,
    XPackageInstallationMonitorHandle monitor)
{
    XPackageInstallationProgress progress;
    XPackageGetInstallationProgress(monitor, &progress);

    if (progress.completed)
    {
        printf("Track ready\n");
        XPackageCloseInstallationMonitorHandle(monitor);
    }
}

HRESULT StartMonitoring(XTaskQueueHandle queue, char* trackName)
{
    char id[XPACKAGE_IDENTIFIER_MAX_LENGTH];

    HRESULT hr = XPackageGetCurrentProcessPackageIdentifier(_countof(id), id);
    if (FAILED(hr)) return hr;

    XPackageChunkSelector selector;
    selector.type = XPackageChunkSelectorType::Tag;
    selector.tag = trackName;

    XPackageInstallationMonitorHandle monitor;
    hr = XPackageCreateInstallationMonitor(
        id,         // Identity to be monitored
        1,          // Number of selectors
        &selector,  // Selectors
        1000,       // Resolution of the monitor, in milliseconds
        queue,      // Queue where updates are performed
        &monitor);
    if (FAILED(hr)) return hr;

    XTaskQueueRegistrationToken token;
    hr = XPackageRegisterInstallationProgressChanged(
        monitor,
        nullptr,
        ProgressChangedCallback,
        &token);

    if (FAILED(hr))
    {
        XPackageCloseInstallationMonitorHandle(monitor);
    }

    return hr;
}

让我们演练上面显示的代码中的每个 API 调用:

XPackageGetCurrentProcessPackageIdentifier(_countof(id), id); 

所有安装的内容都将具有唯一标识符。 如果您知道程序包标识符并且您有权访问该内容,则可以监视任何程序包的安装。 一个正在运行的进程可以获取其自己的包标识符。 有关包标识符的详细信息,请参阅管理和许可可下载内容 (DLC)

XPackageCreateInstallationMonitor( 
    id,         // Identity to be monitored 
    1,          // Number of selectors 
    &selector,  // Selectors 
    1000,       // Resolution of the monitor, in milliseconds 
    queue,      // Queue where updates are performed 
    &monitor); 

这将创建一个对安装状态保持跟踪的监视器。 安装监视器将定期更新自身。 要获取安装的当前进度,请调用 XPackageGetInstallationProgress;要获得安装期间所发生变化的通知,请注册回调。

您可以为整个软件包或特定的子集创建安装监视器。 在这里,你已定义了一个“选择器”,表明你想要了解赛道名称的安装进度。 您可以指定频率(在本例中为 1000 毫秒),以指示安装监视器将更新其进度快照的频率(最高为此速度)。 如果未及时取得进度,可能会降低速度。

hr = XPackageRegisterInstallationProgressChanged(
    monitor,
    nullptr,
    ProgressChangedCallback,
    &token);

您想要知道赛道何时完成加载,以便在监视器上注册进度更改事件。 此回调将通过创建监视器时提供的任务队列来调用,大致采用在 XPackageCreateInstallationMonitor 中指定的节奏。 在回调内,您可以呈现游戏内进度,或通知游戏赛道已准备就绪。

在此示例中,您关闭安装监视器,但不取消注册通知。 安装监视器通知的生命周期与安装监视器关联;因此,关闭监视器会向其取消注册所有通知。

要求

头文件:XPackage.h

库:xgameruntime.lib

支持平台:Windows、Xbox One 系列主机和 Xbox Series 主机

另请参阅

XPackage