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 主机