Esempio ASYNC: download asincrono di dati
Aggiornamento: novembre 2007
Nell'esempio ASYNC viene creato un controllo per l'esecuzione del download asincrono di dati 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.
In Esempio di attributi per ASYNC viene fornita la versione con gli 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 Esempi dal menu ?.
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.
Generazione ed esecuzione dell'esempio
Per generare ed eseguire l'esempio
Aprire il file di soluzione async.sln.
Scegliere Genera soluzione dal menu Genera.
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.
Funzionamento dell'esempio
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.
Parole chiave
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