ASYNC 屬性範例:非同步下載資料
更新:2007 年 11 月
ASYNC 屬性 (Attribute) 範例會建立一個從 URL 以非同步方式下載資料的控制項,該控制項實作 IBindStatusCallback 介面。通常,您會以非同步方式下載大型二進位物件或屬性 (Property),這可以讓控制項的使用者介面在長時間的網路操作下保持不中斷。此外,使用非同步下載也可以讓使用者中止下載。ATL 會在內部使用 WinInet 函式實作非同步下載。
ASYNC 範例是本範例的未使用屬性版本。
安全性注意事項: |
---|
這個程式碼範例僅供概念說明之用,同時因為範例中的程式碼撰寫並沒有周全的顧及所有安全性問題,所以本範例不適用於實際執行的應用程式或網站中。如果使用者擅自將範例程式碼用於其他意圖而導致連帶事件或重大損害時,Microsoft 將不承擔任何責任。 |
若要取得範例和指示以便進行安裝:
按一下 Visual Studio [說明] 功能表上的 [範例]。
如需詳細資訊,請參閱尋找範例檔案。
最新版的完整範例清單可從 Visual Studio 2008 範例網頁 (英文) 取得。
您也可以將範例置於電腦硬碟中。根據預設,範例和讀我檔案都會複製到 \Program Files\Visual Studio 9.0\Samples\ 下的資料夾中。對於所有的 Visual Studio Express 版,所有範例都可在線上找到。
建置和執行範例
若要建置和執行這個範例
開啟方案檔 async.sln。
在 [建置] 功能表中,按一下 [建置方案]。
在範例建置之後,在 Web 瀏覽器中開啟 ATLAsync.htm,然後依照指示進行,如此會設定 ASYNC 控制項的 URL 屬性 (Property) 並啟動下載。資料下載完畢後,您會看到該屬性顯示在 ASYNC 控制項中。
您可以在 ActiveX 控制項測試容器中測試控制項。如需存取測試容器和使用容器測試控制項的詳細資訊,請參閱使用測試容器測試屬性和事件。
範例如何操作
ASYNC 建立一個具有屬性 (Property) 名為 URL 的子類別化編輯控制項,URL 屬性是一個代表指向資料之 URL 的 BSTR。而 ASYNC 範例會使用 ATL CBindStatusCallback 類別實作非同步下載。當控制項使用者設定 URL 屬性時,ASYNC 便會建立 CBindStatusCallback 物件。然後,會呼叫 CBindStatusCallback::StartAsyncDownload 方法,並且傳遞 URL 和指向回呼函式 (Callback Function) 的指標。而這個 CAtlAsync::OnData 函式會被 CBindStatusCallback 物件呼叫,並且傳入從 URL 接收到的二進位資料。CAtlAsync::OnData 只是會在顯示時將接收到的資料傳送到子類別化編輯控制項。
如需如何使用 ATL 將 Windows 控制項設定為 Superclass 的範例,請參閱 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++ 精靈、程式庫以及編譯器方面的變更,不過還是可以示範如何完成您要進行的工作。 |