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