ASYNC 특성 샘플: 비동기적으로 데이터 다운로드
업데이트: 2007년 11월
ASYNC 특성 샘플에서는 URL에서 비동기적으로 데이터를 다운로드하는 컨트롤을 만듭니다. 이 컨트롤은 IBindStatusCallback 인터페이스를 구현합니다. 일반적으로 크기가 큰 이진 개체나 속성은 비동기적으로 다운로드합니다. 이렇게 하면 컨트롤의 사용자 인터페이스가 시간이 많이 걸릴 수 있는 네트워크 작업 동안에도 차단되지 않은 상태로 있습니다. 비동기 다운로드를 사용하는 경우에는 사용자가 다운로드를 중단할 수도 있습니다. ATL에서는 내부적으로 WinInet 함수를 사용하여 비동기 다운로드를 구현합니다.
ASYNC 샘플은 이 샘플의 특성을 사용하지 않는 버전입니다.
보안 정보: |
---|
이 샘플 코드는 개념을 보여 주기 위해 제공되며 가장 안전한 코드 작성 방법을 제시하지 않을 수 있으므로 응용 프로그램이나 웹 사이트에서 사용할 수 없습니다. Microsoft는 샘플 코드를 원래 용도 이외의 다른 용도로 사용하는 경우 발생하는 부수적이나 파생적인 손해에 대해 책임을 지지 않습니다. |
샘플 및 이를 설치하기 위한 지침을 가져오려면
Visual Studio의 도움말 메뉴에서 샘플을 클릭합니다.
자세한 내용은 샘플 파일 찾기를 참조하십시오.
최신 버전 및 전체 샘플 목록은 Visual Studio 2008 Samples 페이지에서 온라인으로 사용할 수 있습니다.
컴퓨터의 하드 디스크에서도 샘플을 찾을 수 있습니다. 기본적으로 샘플과 추가 정보 파일은 \Program Files\Visual Studio 9.0\Samples\ 아래의 폴더에 복사됩니다. Visual Studio Express Edition의 경우에는 모든 샘플이 온라인에 있습니다.
샘플 빌드 및 실행
이 샘플을 빌드하고 실행하려면
Oasync.sln 솔루션 파일을 엽니다.
빌드 메뉴에서 솔루션 빌드를 클릭합니다.
샘플이 빌드된 후 웹 브라우저에서 ATLAsync.htm을 열고 지침을 따릅니다. 그러면 ASYNC 컨트롤의 URL 속성이 설정되고 다운로드가 시작됩니다. 데이터가 다운로드될 때는 ASYNC 컨트롤에 해당 내용이 표시됩니다.
ActiveX Control Test Container에서 컨트롤을 테스트할 수 있습니다. 테스트 컨테이너에 액세스하고 테스트 컨테이너를 사용하여 컨트롤을 테스트하는 데 대한 자세한 내용은 Test Container를 사용하여 속성 및 이벤트 테스트를 참조하십시오.
샘플 작동 방식
ASYNC에서는 URL이라는 하나의 속성을 사용하여 서브클래싱된 편집 컨트롤을 만듭니다. URL 속성은 데이터를 가리키는 URL을 나타내는 BSTR입니다. ASYNC 샘플에서는 ATL CBindStatusCallback 클래스를 사용하여 비동기 다운로드를 구현합니다. 컨트롤 사용자가 URL 속성을 설정하면 ASYNC에서 CBindStatusCallback 개체를 만듭니다. 그런 다음에는 CBindStatusCallback::StartAsyncDownload 메서드가 호출되어 URL과 콜백 함수에 대한 포인터가 전달됩니다. 이 CAtlAsync::OnData 함수는 CBindStatusCallback 개체에 의해 호출되며 URL을 받으면 해당 URL에서 이진 데이터가 전달됩니다. CAtlAsync::OnData는 단순히 받은 데이터를 서브클래싱된 편집 컨트롤에 보내고 이 컨트롤에서는 데이터가 표시됩니다.
ATL을 사용하여 Windows 컨트롤을 슈퍼클래스로 만드는 예제를 보려면 ATL SUBEDIT 샘플을 참조하십시오.
특성
이 샘플에서는 다음의 특성을 사용합니다.
coclass, default, dual, helpstring, id, implements_category, in, module, object, out, pointer_default, progid, propget, propput, registration_script, retval, threading, uuid, version, vi_progid
키워드
이 샘플에서는 다음의 키워드를 사용합니다.
ALT_MSG_MAP; ATLTRACE ; BEGIN_COM_MAP; BEGIN_MSG_MAP; BEGIN_OBJECT_MAP; BEGIN_PROPERTY_MAP; CBindStatusCallback::Download; CComBSTR::Append; CComCoClass; CComControl; CComModule::GetClassObject; CComModule::GetLockCount; CComModule::Init; CComModule::RegisterServer; CComModule::Term; CComModule::UnregisterServer; CComObjectRoot; COM_INTERFACE_ENTRY; COM_INTERFACE_ENTRY_IMPL; DECLARE_REGISTRY_RESOURCEID; DisableThreadLibraryCalls; DLL_PROCESS_ATTACH; DLL_PROCESS_DETACH; DllMain; END_COM_MAP; END_MSG_MAP; END_OBJECT_MAP; END_PROPERTY_MAP; IDataObjectImpl; IDispatchImpl; IObjectSafetyImpl; IOleControlImpl; IOleInPlaceActiveObjectImpl; IOleInPlaceObjectWindowlessImpl; IOleInPlaceObjectWindowlessImpl::SetObjectRects; IOleObjectImpl; IPerPropertyBrowsingImpl; IPersistPropertyBagImpl; IPersistStorageImpl; IPersistStreamInitImpl; IProvideClassInfo2Impl; IQuickActivateImpl; IsWindow; IViewObjectExImpl; MESSAGE_HANDLER; OBJECT_ENTRY; PROP_ENTRY; SendMessage; USES_CONVERSION
참고: |
---|
이 샘플을 비롯한 일부 샘플은 Visual C++ 마법사, 라이브러리 및 컴파일러의 변경 내용을 반영하도록 수정되지 않았지만 해당 작업의 수행 방법을 보여 줍니다. |