UploadOperation Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Esegue un'operazione di caricamento asincrona. Per una panoramica delle funzionalità di trasferimento in background, vedere Trasferimento dei dati in background. Scaricare l'esempio di trasferimento in background per un esempio di codice.
public ref class UploadOperation sealed : IBackgroundTransferOperationPriority
/// [Windows.Foundation.Metadata.ContractVersion(Windows.Foundation.UniversalApiContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
class UploadOperation final : IBackgroundTransferOperationPriority
[Windows.Foundation.Metadata.ContractVersion(typeof(Windows.Foundation.UniversalApiContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
public sealed class UploadOperation : IBackgroundTransferOperationPriority
Public NotInheritable Class UploadOperation
Implements IBackgroundTransferOperationPriority
- Ereditarietà
- Attributi
- Implementazioni
Requisiti Windows
Famiglia di dispositivi |
Windows 10 (è stato introdotto in 10.0.10240.0)
|
API contract |
Windows.Foundation.UniversalApiContract (è stato introdotto in v1.0)
|
Funzionalità dell'app |
internetClient
internetClientServer
privateNetworkClientServer
|
Esempio
Nell'esempio seguente viene illustrato come configurare e avviare un'operazione di caricamento di base.
using Windows.Foundation;
using Windows.Networking.BackgroundTransfer;
using Windows.Storage.Pickers;
using Windows.Storage;
private async void StartUpload_Click(object sender, RoutedEventArgs e)
{
try
{
Uri uri = new Uri(serverAddressField.Text.Trim());
FileOpenPicker picker = new FileOpenPicker();
picker.FileTypeFilter.Add("*");
StorageFile file = await picker.PickSingleFileAsync();
BackgroundUploader uploader = new BackgroundUploader();
uploader.SetRequestHeader("Filename", file.Name);
UploadOperation upload = uploader.CreateUpload(uri, file);
// Attach progress and completion handlers.
HandleUploadAsync(upload, true);
}
catch (Exception ex)
{
LogException("Upload Error", ex);
}
}
Commenti
Dopo la chiusura dell'app, un'app deve enumerare tutte le istanze UploadOperation esistenti all'avvio successivo usando GetCurrentUploadsAsync. Quando un'app UWP che usa trasferimento in background viene terminata, i caricamenti incompleti verranno mantenuti in background. Se l'app viene riavviata dopo la chiusura e queste operazioni incomplete non vengono enumerate e introdotte nuovamente nella sessione corrente, le risorse del dispositivo non vengono aggiornate e continuano a occupare le risorse del dispositivo. Considerazioni sul timeout
- 1.) Quando si stabilisce una nuova connessione per un caricamento su TCP/SSL, il tentativo di connessione viene interrotto se non viene stabilito entro cinque minuti.
- 2.) Dopo aver stabilito la connessione, viene interrotto un messaggio di richiesta HTTP che non ha ricevuto una risposta entro due minuti. Supponendo che ci sia connettività Internet, trasferimento in background ritenta un caricamento fino a tre volte. Nel caso in cui la connettività Internet non venga rilevata, non verranno eseguiti altri tentativi finché non sarà.
Linee guida per il debug
L'arresto di una sessione di debug in Microsoft Visual Studio è paragonabile alla chiusura dell'app; I caricamenti PUT vengono sospesi e i caricamenti POST vengono interrotti. Anche durante il debug, l'app deve enumerare e quindi sospendere, riavviare o annullare eventuali caricamenti persistenti.
Tuttavia, se il progetto di Microsoft Visual Studio viene aggiornato, ad esempio le modifiche apportate al manifesto dell'app, è necessario disinstallare l'app e distribuirla nuovamente per il debug, GetCurrentUploadsAsync non può enumerare le operazioni persistenti create usando la distribuzione precedente dell'app.
Cronologia delle versioni
Versione di Windows | Versione dell'SDK | Valore aggiunto |
---|---|---|
1803 | 17134 | MakeCurrentInTransferGroup |
2004 | 19041 | RemoveRequestHeader |
2004 | 19041 | SetRequestHeader |
Proprietà
CostPolicy |
Ottiene e imposta i criteri di costo per il caricamento. |
Group |
Nota Il gruppo può essere modificato o non disponibile per le versioni dopo Windows 8.1. Usare invece TransferGroup. Ottiene un valore stringa a cui indica il gruppo a cui appartiene il caricamento. |
Guid |
Si tratta di un identificatore univoco per un'operazione di caricamento specifica. Un GUID associato a un'operazione di caricamento non cambierà per la durata del caricamento. |
Method |
Ottiene il metodo da utilizzare per il caricamento. |
Priority |
Ottiene o imposta la priorità di trasferimento di questa operazione di caricamento all'interno di backgroundTransferGroup. I valori possibili sono definiti da BackgroundTransferPriority. |
Progress |
Ottiene lo stato corrente dell'operazione di caricamento. |
RequestedUri |
Ottiene l'URI da cui caricare. |
SourceFile |
Specifica IStorageFile da caricare. |
TransferGroup |
Ottiene il gruppo a cui appartiene l'operazione di caricamento. |
Metodi
AttachAsync() |
Restituisce un'operazione asincrona che può essere utilizzata per monitorare lo stato di avanzamento e il completamento del caricamento collegato. La chiamata a questo metodo consente a un'app di allegare le operazioni di caricamento avviate in un'istanza precedente dell'app. |
GetResponseInformation() |
Ottiene le informazioni sulla risposta. |
GetResultStreamAt(UInt64) |
Ottiene la risposta caricata parzialmente nella posizione specificata. |
MakeCurrentInTransferGroup() |
Assegna la priorità all'operazione di trasferimento del caricamento (ed eventuali trasferimenti che lo seguono nello stesso gruppo di trasferimento). La chiamata di questo metodo a un trasferimento che non appartiene a un gruppo di trasferimento non ha alcun effetto. |
RemoveRequestHeader(String) |
Usato per rimuovere un'intestazione di richiesta HTTP. |
SetRequestHeader(String, String) |
Usato per impostare un'intestazione di richiesta HTTP. |
StartAsync() |
Avvia un'operazione di caricamento asincrona. |