Datarequested 처리기에서 비동기적으로 호출하는 방법(HTML)
[ 이 문서는 Windows 런타임 앱을 작성하는 Windows에서 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]
여기에서는 datarequested 이벤트에 대한 응답으로 데이터를 비동기적으로 생성하는 방법을 보여 줍니다. 앱이 datarequested 이벤트에 응답하여 비동기 작업을 수행하는 경우 먼저 DataRequestDeferral 개체를 가져와야 합니다. 지연 개체 가져오기에서는 대리자가 반환된 후 DataPackage에 데이터를 추가하는 호출이 수행될 수 있음을 시스템에 알릴 수 있습니다.
참고 텍스트 또는 링크를 공유하는 경우에는 이 항목에 나오는 코드가 필요하지 않습니다. 대신 setText 및 setUri 메서드를 사용하는 것이 더 빠릅니다.
알아야 할 사항
기술
사전 요구 사항
- Microsoft Visual Studio 및 관련 템플릿을 잘 알고 있어야 합니다.
- JavaScript에 대해 잘 알고 있어야 합니다.
- 파일 및 기타 데이터를 가져오는 방법(예: FileOpenPicker 사용)을 알고 있어야 합니다.
지침
단계 1: 앱을 공유 소스로 설정
DataTransferManager 개체는 모든 공유 작업의 주요 시작점입니다. 앱의 activated 이벤트 처리기에서 DataTransferManager 개체에 datarequested 이벤트 처리기를 추가합니다. datarequested 이벤트는 사용자가 공유 참 메뉴를 호출할 때 발생합니다.
var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
dataTransferManager.addEventListener("datarequested", shareAsyncHandler);
나머지 단계에서는 shareAsyncHandler
함수를 구현합니다.
단계 2: DataRequest 개체 가져오기
datarequested 이벤트가 발생하면 앱이 DataRequest 개체를 받습니다. 이 개체에는 사용자가 공유하려는 콘텐츠를 제공하는 데 사용할 수 있는 DataPackage가 포함되어 있습니다.
var request = e.request;
단계 3: 제목 및 설명 속성 설정
request.data.properties.title = "Async Share Example";
request.data.properties.description =
"Demonstrates how to make asynchronous calls from a datarequested event handler.";
단계 4: 지연 개체 가져오기
지연 개체를 가져오려면 getDeferral을 호출합니다.
var deferral = request.getDeferral();
단계 5: 비동기 호출을 수행하여 데이터 준비
DataPackage에서 지원하는 메서드를 사용하여 콘텐츠를 추가할 수 있습니다. 여기서는 setStorageItems을 사용하여 파일을 공유합니다.
Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("images\\logo.png").done(function (storageFile) {
request.data.setStorageItems([storageFile]);
});
단계 6: complete 메서드 호출
DataRequestDeferral.complete 메서드는 공유할 데이터를 준비 중임을 시스템에 알려 줍니다.
deferral.complete();
또한 비동기 호출의 오류 처리기에서 DataRequestDeferral.complete를 호출해야 합니다.
전체 예제
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());
}
};