Esempio di attributi ASYNC: download asincrono di dati

Aggiornamento: novembre 2007

L'esempio di attributi ASYNC consente di creare un controllo che esegue il download dei dati in modo asincrono da un URL. Il controllo implementa l'interfaccia IBindStatusCallback. Il download asincrono viene in genere eseguito per proprietà e oggetti binari di grandi dimensioni. In questo modo, l'interfaccia utente del controllo non rimane bloccata durante l'esecuzione di operazioni di rete che possono richiedere molto tempo. L'utilizzo del download asincrono offre inoltre all'utente la possibilità di interrompere l'operazione. Per implementare il download asincrono, ATL utilizza internamente funzioni WinInet.

L'esempio ASYNC rappresenta la versione senza attributi di questo esempio.

Nota sulla sicurezza:

Questo esempio di codice viene fornito solo a scopo dimostrativo e non deve essere utilizzato in applicazioni o siti Web, poiché potrebbe non implementare le tecniche migliori a livello di sicurezza. Microsoft esclude ogni responsabilità per danni diretti o indiretti derivanti dall'utilizzo dell'esempio di codice per scopi diversi da quelli previsti.

Per ottenere gli esempi e le istruzioni per l'installazione:

  • In Visual Studio scegliere Samples dal menu Guida.

    Per ulteriori informazioni, vedere Individuazione dei file di esempio.

  • La versione più recente e l'elenco completo degli esempi sono disponibili in linea alla pagina Visual Studio 2008 Samples.

  • È anche possibile trovare gli esempi sul disco rigido del computer. Per impostazione predefinita, gli esempi e il file Leggimi vengono copiati in una cartella nel percorso \Programmi\Visual Studio 9.0\Samples\. Per le versioni Express di Visual Studio, tutti gli esempi sono disponibili in linea.

Per generare ed eseguire l'esempio

  1. Aprire il file di soluzione async.sln.

  2. Scegliere Genera soluzione dal menu Genera.

  3. Dopo la generazione dell'esempio, aprire ATLAsync.htm nel browser e attenersi alle istruzioni. Verrà impostata la proprietà URL del controllo ASYNC e verrà avviato il download. Il download dei dati in corso verrà visualizzato nel controllo ASYNC.

Il controllo può essere verificato in ActiveX Control Test Container. Per informazioni dettagliate sull'accesso a Test Container e sul relativo utilizzo per il test di un controllo, vedere Verifica di proprietà ed eventi tramite Test Container.

In ASYNC viene creato un controllo di modifica sottoclassato, che dispone di una proprietà denominata URL. La proprietà URL corrisponde a un tipo BSTR che rappresenta un URL che fa riferimento ai dati. Nell'esempio ASYNC, il download asincrono viene implementato mediante la classe ATL CBindStatusCallback. Quando l'utente del controllo imposta la proprietà URL, ASYNC crea un oggetto CBindStatusCallback. Viene quindi chiamato il metodo CBindStatusCallback::StartAsyncDownload, a cui vengono passati l'URL e un puntatore a una funzione di callback. A questa funzione CAtlAsync::OnData, chiamata dall'oggetto CBindStatusCallback, vengono passati i dati binari provenienti dall'URL appena vengono ricevuti. CAtlAsync::OnData invia semplicemente i dati ricevuti al controllo di modifica sottoclassato, in cui vengono visualizzati.

Per un esempio di come rendere superclasse i controlli Windows mediante ATL, vedere l'esempio SubEdit relativo ad ATL.

Nell'esempio vengono utilizzati i seguenti attributi:

coclass, default, dual, helpstring, id, implements_category, in, module, object, out, pointer_default, progid, propget, propput, registration_script, retval, threading, uuid, version, vi_progid

Nell'esempio vengono utilizzate le parole chiave seguenti:

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

Nota:

Alcuni esempi, tra cui il presente, non sono stati cambiati per riflettere le modifiche apportate alle procedure guidate, alle librerie e al compilatore di Visual C++, tuttavia forniscono comunque le istruzioni per completare l'attività desiderata.

Aggiunte alla community

Mostra: