So wird’s gemacht: Asynchrone Aufrufe im DataRequested-Handler (HTML)

[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]

Hier zeigen wir Ihnen, wie Sie Daten als Antwort auf ein datarequested-Ereignis asynchron erzeugen können. Wenn Ihre App einen asynchronen Vorgang als Reaktion auf ein datarequested-Ereignis ausführt, muss sie zunächst ein DataRequestDeferral-Objekt abrufen. Durch das Abrufen eines Verzögerungsobjekts können Sie dem System mitteilen, dass der Aufruf zum Hinzufügen von Daten zu DataPackage nach Rückgabe des Delegaten ausgeführt werden kann.

Hinweis  Wenn Sie nur Text oder einen Link freigeben, benötigen Sie den Code in diesem Thema nicht. Es geht schneller, die Methoden setText und setUri zu verwenden.

 

Wissenswertes

Technologien

Voraussetzungen

  • Sie sollten mit Microsoft Visual Studio und den zugehörigen Vorlagen vertraut sein.
  • Sie sollten mit JavaScript vertraut sein.
  • Sie sollten nachvollziehen können, wie Dateien und andere Daten abgerufen werden (z. B. mithilfe von FileOpenPicker).

Anweisungen

Schritt 1: Einrichten der App als Freigabequelle

Das DataTransferManager-Objekt ist der wichtigste Startpunkt für alle Freigabeoperationen. Fügen Sie im DataTransferManager-Objekt des activated-Ereignishandlers Ihrer App einendatarequested-Ereignishandler hinzu. Das datarequested-Ereignis tritt ein, wenn der Benutzer den Charm "Teilen" aufruft.

var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
    dataTransferManager.addEventListener("datarequested", shareAsyncHandler);

Die verbleibenden Schritte dienen der Implementierung der shareAsyncHandler-Funktion.

Schritt 2: Abrufen eines DataRequest-Objekts

Wenn ein datarequested-Ereignis auftritt, erhält Ihre App ein DataRequest-Objekt. Dieses Objekt enthält ein DataPackage, mit dem Sie den Inhalt bereitstellen können, den der Benutzer teilen möchte.

var request = e.request;

Schritt 3: Festlegen der Kachel- und Beschreibungseigenschaften

request.data.properties.title = "Async Share Example";
request.data.properties.description =
    "Demonstrates how to make asynchronous calls from a datarequested event handler.";

Schritt 4: Abrufen eines Verzögerungsobjekts

Rufen Sie zum Abrufen eines Verzögerungsobjekts getDeferral auf.

var deferral = request.getDeferral();

Schritt 5: Vorbereiten von Daten mit einem asynchronen Aufruf

Sie können eine beliebige vom DataPackage unterstützte Methode verwenden, um Inhalt hinzuzufügen. Hier wird setStorageItems verwendet, um eine Datei freizugeben.

Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("images\\logo.png").done(function (storageFile) {
    request.data.setStorageItems([storageFile]);
});

Schritt 6: Aufrufen der complete-Methode

Die DataRequestDeferral.complete-Methode teilt dem System mit, dass die Daten zum Teilen bereit sind.

deferral.complete();

Darüber hinaus muss DataRequestDeferral.complete im Fehlerhandler des asynchronen Aufrufs aufgerufen werden.

Vollständiges Beispiel

function shareAsyncHandler(e) {
    var request = e.request;
    request.data.properties.title = "Async Share Example";
    request.data.properties.description = 
        "Demonstrates how to make asynchronous calls from a datarequested event handler.";
    var deferral = request.getDeferral();
    Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("images\\logo.png").done(function (storageFile) {
        request.data.setStorageItems([storageFile]);
        deferral.complete();
    }, function (err) {
        deferral.complete();
    });
}

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
            // This app was recently launched; register it as share source.
            var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
            dataTransferManager.addEventListener("datarequested", shareAsyncHandler);
        } else {
            // TODO: This app was reactivated from suspension.
            // Restore the app state here.
        }
        args.setPromise(WinJS.UI.processAll());
    }
};

Verwandte Themen

Beispiel zur Inhaltsfreigabe Quell-App

Freigeben und Austauschen von Daten

So wird's gemacht: Unterstützen von Pullvorgängen

Schnellstart: Teilen von Inhalt

DataPackage

Windows.ApplicationModel.DataTransfer

Windows.ApplicationModel.DataTransfer.Share