Образец атрибутов ASYNC: асинхронная загрузка данных
Обновлен: Ноябрь 2007
В образце атрибутов ASYNC создается элемент управления, который асинхронным образом загружает данные с URL-адреса. В элементе управления реализуется интерфейс IBindStatusCallback. Обычно асинхронная загрузка применяется для больших двоичных объектов или свойств. Это позволяет избежать блокирования пользовательского интерфейса элемента управления во время сетевых операций, которые могут занять продолжительное время. Кроме того, асинхронная загрузка позволяет пользователю прервать процесс загрузки. Библиотека ATL внутренним образом использует функции WinInet для реализации асинхронной загрузки.
Образец ASYNC представляет версию данного образца без поддержки атрибутов.
Примечание о безопасности. |
---|
Этот образец кода служит для демонстрации основных принципов и не предназначен для использования в приложениях или на веб-узлах, поскольку не может считаться примером наиболее безопасного кода. Корпорация Майкрософт не несет ответственности за случайные или косвенные убытки в случае использования образца кода не по назначению. |
Чтобы получить образцы и инструкции по их установке, выполните следующие действия.
В меню Справка среды Visual Studio выберите пункт Примеры.
Дополнительные сведения см. в разделе Поиск файлов примеров.
Самая последняя версия и полный список образцов доступны в Интернете на странице образцов Visual Studio 2008.
Кроме того, образцы находятся на жестком диске компьютера. По умолчанию образцы кода и файл Readme копируются в папку, находящуюся в папке \Program Files\Visual Studio 9.0\Samples\. Все образцы кода для экспресс-выпусков Visual Studio находятся в Интернете.
Построение и запуск образца
Построение и запуск этого образца
Откройте файл решения async.sln.
В меню Построение выберите команду Построить решение.
После построения образца откройте файл ATLAsync.htm в веб-обозревателе и выполните инструкции. Будет установлено свойство URL для элемента управления ASYNC, и начнется загрузка. В ходе загрузки данных они будут отображаться в элементе управления ASYNC.
Этот элемент управления можно тестировать в тестовом контейнере элементов управления ActiveX. Дополнительные сведения о доступе к тестовому контейнеру и его применении для тестирования элементов управления см. в разделеТестирование свойств и событий в тестовом контейнере.
Принцип работы образца
Образец ASYNC создает подкласс для элемента управления "Поле ввода" с одним свойством (URL). Свойство URL имеет тип BSTR и представляет URL-адрес, указывающий на данные. В образце ASYNC используется класс CBindStatusCallback библиотеки ATL для реализации асинхронной загрузки. Когда пользователь элемента управления устанавливает свойство URL, образец ASYNC создает объект CBindStatusCallback. Затем вызывается метод CBindStatusCallback::StartAsyncDownload, которому передается URL-адрес и указатель на функцию обратного вызова. Эта функция (CAtlAsync::OnData) вызывается объектом CBindStatusCallback, и ей передаются двоичные данные, полученные с URL-адреса. Функция CAtlAsync::OnData просто отправляет полученные данные в элемент управления "Поле ввода", построенный на основе подкласса, где эти данные отображаются.
Пример создания суперклассов для элементов управления Windows с использованием библиотеки ATL см. в описании образца SubEdit библиотеки ATL.
Атрибуты
В этом образце используются следующие атрибуты:
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++, однако по-прежнему демонстрируют выполнение требуемой задачи. |