> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XPackageInstallationProgressCallback

> XPackageInstallationProgressCallback

# XPackageInstallationProgressCallback

Um retorno de chamada usado por [XPackageRegisterInstallationProgressChanged](/pt-BR/reference/system/xpackage/functions/xpackageregisterinstallationprogresschanged).

## Sintaxe

```cpp theme={null}
void XPackageInstallationProgressCallback(  
         void* context,  
         XPackageInstallationMonitorHandle monitor  
)  
```

### Parâmetros

*context*   \_In\_\
Tipo: void\*

O contexto passado para [XPackageRegisterInstallationProgressChanged](/pt-BR/reference/system/xpackage/functions/xpackageregisterinstallationprogresschanged).

*monitor*   \_In\_\
Tipo: XPackageInstallationMonitorHandle

Um monitor de instalação para uma instalação.

### Valor retornado

Tipo: void

## Comentários

**PackageInstallationProgressCallback** será chamado na cadência especificada durante o registro da notificação ProgressChanged.

Um jogo pode implementar um marcador de inicialização para que possa ser executado antes de ser totalmente instalado. O jogo precisará saber quais partes estão instaladas e quais não estão. No exemplo a seguir, o jogo precisa saber quando as partes associadas a uma pista de corrida com o nome de pista especificado estão instaladas:

```cpp theme={null}
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;
}
```

Vamos examinar cada chamada de API no código mostrado acima:

```cpp theme={null}
XPackageGetCurrentProcessPackageIdentifier(_countof(id), id); 
```

Todo conteúdo instalado terá um identificador exclusivo. Você pode monitorar a instalação de qualquer pacote se souber o identificador do pacote e tiver acesso a esse conteúdo. Um processo em execução pode obter seu próprio identificador de pacote. Para obter mais informações sobre identificadores de pacote, consulte [Gerenciar e licenciar conteúdo baixável (DLC)](/pt-BR/publishing/xstore-commerce/xstore-dlc).

```cpp theme={null}
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);
```

Isso cria um monitor que acompanha o estado da instalação. Esse monitor de instalação se atualiza em uma cadência regular. Para obter o progresso atual de uma instalação, chame [XPackageGetInstallationProgress](/pt-BR/reference/system/xpackage/functions/xpackagegetinstallationprogress); para ser notificado sobre uma alteração durante uma instalação, registre um retorno de chamada.

Você pode criar o monitor de instalação para o pacote inteiro ou para um subconjunto específico. Aqui, você definiu um "seletor" que indica que deseja saber o progresso da instalação de um nome de pista. Você pode especificar uma frequência (neste caso, 1000 ms) que indica com que frequência o monitor de instalação atualizará seu instantâneo do progresso, até essa velocidade. Se nenhum progresso tiver sido feito nesse tempo, poderá ser mais lento.

```cpp theme={null}
XPackageRegisterInstallationProgressChanged(
    monitor,
    nullptr,
    ProgressChangedCallback,
    &token);
```

Você quer saber quando a pista terminou de carregar, então registra um evento de alteração de progresso no monitor. Esse retorno de chamada será invocado por meio da fila de tarefas fornecida quando o monitor foi criado, aproximadamente na cadência especificada em [XPackageCreateInstallationMonitor](/pt-BR/reference/system/xpackage/functions/xpackagecreateinstallationmonitor). Dentro do retorno de chamada, você pode renderizar o progresso no jogo ou notificar o jogo de que uma pista está pronta.

Neste exemplo, você fecha o monitor de instalação, mas não cancela o registro da notificação. O tempo de vida de uma notificação de monitor de instalação está vinculado ao monitor de instalação; portanto, fechar o monitor cancela o registro de todas as notificações associadas a ele.

## Requisitos

**Cabeçalho:** XPackage.h

**Biblioteca:** xgameruntime.lib

**Plataformas compatíveis:** Windows, consoles da família XBOX One e consoles XBOX Series

## Confira também

[XPackage](/pt-BR/reference/system/xpackage/xpackage_members)\
[Instalação por streaming e Intelligent Delivery](/pt-BR/build/core-features/common/packaging/overviews/streaming_install-intelligent_delivery)\
[XPackageGetInstallationProgress](/pt-BR/reference/system/xpackage/functions/xpackagegetinstallationprogress)\
[XPackageCreateInstallationMonitor](/pt-BR/reference/system/xpackage/functions/xpackagecreateinstallationmonitor)


## Related topics

- [XPackageInstallationProgressCallback](/reference/system/xpackage/functions/xpackageinstallationprogresscallback.md)
- [XPackageRegisterInstallationProgressChanged](/reference/system/xpackage/functions/xpackageregisterinstallationprogresschanged.md)
