Interfaccia IClosable (windows.foundation.h)

Definisce un metodo per il rilascio di risorse allocate.

Ereditarietà

L'interfaccia IClosable eredita dall'interfaccia IInspectable . IClosable include anche questi tipi di membri:

Metodi

L'interfaccia IClosable include questi metodi.

 
IClosable::Close

Esegue attività definite dall'applicazione associate a liberamento, rilascio o reimpostazione delle risorse allocate.

Commenti

Usare l'interfaccia IClosable per gestire la durata delle risorse di sistema, ad esempio handle di file e socket di rete, usati da un oggetto Windows Runtime.

Alcune risorse di sistema vengono usate esclusivamente da una singola parte di codice e devono essere liberate prima che altri codici possano usarli. Ad esempio, l'apertura di un file per l'accesso in lettura/scrittura impedisce ad altri codici di aprire lo stesso file per l'accesso in lettura/scrittura, quindi il codice che ha aperto il file deve chiudere l'handle di file prima che altri codici possano aprirli.

Altre risorse di sistema non sono esclusive. Molti dispositivi hardware, ad esempio sensori, georilevazione, SMS e dispositivi portatili possono essere aperti più volte all'interno della stessa app o da più app.

L'interfaccia IClosable consente di gestire le risorse di sistema esclusive. Quando si chiama il metodo Close in un oggetto Windows Runtime, l'oggetto rilascia le risorse di sistema in modo che siano disponibili per altri codici da usare. Gli oggetti che usano solo risorse di sistema condivise, ad esempio dispositivi condivisi e condivisibili, non implementano IClosable.

Quando si implementa il metodo Close in un oggetto Windows Runtime, il codice deve rilasciare tutte le risorse di uso esclusivo che contiene. Se l'oggetto ha riferimenti ad altri oggetti Windows Runtime chiudibili, deve chiamare Close sugli oggetti prima che vengano rilasciati. Inoltre, il codice deve rilasciare altre risorse, ad esempio riferimenti ad altri oggetti Windows Runtime e Component Object Model (COM) e risorse di sistema non esclusive, ad esempio buffer di memoria.

La chiamata al metodo Close in un oggetto lascia l'oggetto in memoria, ma l'oggetto non dispone più delle risorse di sistema necessarie per funzionare correttamente. I membri che dipendono dalle risorse di sistema rilasciate devono restituire RO_E_CLOSED per indicare che l'oggetto è chiuso e che questi membri non funzionano più.

I metodi definiti dalle interfacce IUnknown e IInspectable devono continuare a funzionare normalmente dopo la chiamata a Close .

La chiamata a Close su un oggetto già chiuso non ha alcun effetto e restituisce S_OK.

In genere, gli oggetti tengono traccia dello stato chiuso impostando un flag booleano quando viene chiamato Close oppure controllando le risorse mantenute per null o un altro valore sentinel.

Gli oggetti non devono sincronizzare l'accesso al metodo Close . Ciò significa che le condizioni di gara sono possibili in cui un thread chiama Close su un oggetto mentre un altro thread usa l'oggetto. In questo caso, è possibile ottenere un errore diverso da RO_E_CLOSED, ma è necessario assicurarsi che l'oggetto non causa una violazione di accesso.

Il metodo Close non blocca durante l'attesa del completamento delle operazioni asincrone. Pertanto, le risorse di sistema sottostanti potrebbero non essere completamente rilasciate quando il metodo Close restituisce. Per garantire la chiusura deterministica, il chiamante deve attendere il completamento o l'annullamento di tutte le operazioni asincrone. Gli oggetti devono completare il rilascio delle risorse di sistema il più rapidamente possibile in caso di operazioni asincrone in sospeso, ma non devono bloccare in attesa del completamento di tali risorse.

Se l'oggetto Windows Runtime chiudibile espone una risorsa di uso esclusivo ad altri oggetti, deve fornire un modo per influire sulla semantica di proprietà di tutti gli oggetti chiudibili che contiene. Ad esempio, la classe DataReader fornisce un metodo DetachStream che restituisce IInputStream ricevuto al momento della creazione. Quando si chiama DetachStream , DataReader non è più il proprietario di IInputStream, quindi DataReader non chiama Close on the IInputStream.

Requisiti

Requisito Valore
Client minimo supportato Windows 8
Server minimo supportato Windows Server 2012
Piattaforma di destinazione Windows
Intestazione windows.foundation.h