Ejemplo ASYNC: descarga datos asincrónicamente

Actualización: noviembre 2007

El ejemplo ASYNC crea un control que permite descargar datos de forma asincrónica desde una dirección URL. El control implementa la interfaz IBindStatusCallback. Normalmente, se realizan descargas asincrónicas de propiedades u objetos binarios grandes. De esta forma, la interfaz de usuario del control permanece desbloqueada durante las operaciones de red de duración prolongada. La utilización de descargas asincrónicas también proporciona al usuario la oportunidad de anular la descarga. ATL utiliza internamente funciones WinInet para implementar las descargas asincrónicas.

El ejemplo de atributos ASYNC constituye la versión con atributos de este ejemplo.

Nota de seguridad:

Este código de ejemplo se proporciona para ilustrar un concepto y no debe utilizarse en aplicaciones o sitios Web, ya que quizás no ilustre las prácticas de codificación más seguras. Microsoft no asume ninguna responsabilidad por daños incidentales o consecuentes en caso de que el código de ejemplo se utilice para propósitos distintos de aquellos para los que se concibió.

Para obtener ejemplos e instrucciones para su instalación:

  • En el menú Ayuda de Visual Studio, haga clic en Ejemplos.

    Para obtener más información, vea Localizar archivos de ejemplo.

  • La lista de ejemplos completa con la versión más reciente está disponible en línea en la página Visual Studio 2008 Samples.

  • También encontrará ejemplos en el disco duro de su equipo. De manera predeterminada, los ejemplos y el archivo Léame se copian en una carpeta bajo \Archivos de programa\Visual Studio 9.0\Samples\. Para las versiones Express de Visual Studio, todos los ejemplos están en línea.

Generar y ejecutar el ejemplo

Para generar y ejecutar este ejemplo

  1. Abra el archivo de solución async.sln.

  2. En el menú Generar, haga clic en Generar solución.

  3. Una vez generado el ejemplo, abra el archivo ATLAsync.htm en el explorador web y siga las instrucciones. Éste define la propiedad URL del control ASYNC e inicia la descarga. Mientras los datos se descargan, podrá verlos en el control ASYNC.

Puede probar el control en ActiveX Control Test Container. Para obtener más detalles sobre cómo obtener acceso a Test Container y utilizarlo para probar un control, vea Probar propiedades y eventos con Test Container.

Cómo funciona el ejemplo

ASYNC crea un control de edición con subclases derivadas y con una propiedad denominada URL. La propiedad URL es un valor BSTR que representa una dirección URL que apunta a los datos. El ejemplo ASYNC utiliza la clase CBindStatusCallback de ATL para implementar descargas asincrónicas. Cuando el usuario del control define la propiedad URL, ASYNC crea un objeto CBindStatusCallback. A continuación, se realiza una llamada al método CBindStatusCallback::StartAsyncDownload y se le pasan como argumentos la dirección URL y un puntero a una función de devolución de llamada. El objeto CBindStatusCallback llama a esta función, CAtlAsync::OnData, y le pasa los datos binarios de la URL a medida que se reciben. CAtlAsync::OnData simplemente envía los datos recibidos al control de edición (que utiliza la técnica de subclases), donde se muestran.

Si desea ver un ejemplo de cómo convertir en superclases controles de Windows mediante ATL, vea el ejemplo SubEdit.

Palabras clave

En este ejemplo se utilizan las siguientes palabras clave:

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

Vea también

Otros recursos

Ejemplos de ATL