資訊: 不要進行封鎖呼叫從 STA 元件

文章翻譯 文章翻譯
文章編號: 291837 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

結論

當您進行封鎖的來電住在一個單一執行緒公寓 (STA) 所有居住在該 STA 等待您的執行個體,以解除封鎖該公寓其他 COM 實例您元件物件模型 (COM) 物件執行個體。如果需要進行封鎖呼叫從元件建議您進行封鎖呼叫從其執行緒模型是空閒的元件。

呼叫被視為封鎖如果花時間傳回一個長或不定數量,例如呼叫到後端使用遠端程序呼叫 (RPC) 的網路呼叫或通訊端。

在另外 Microsoft Visual Basic 只能建立 STA 應用程式和其執行緒模型是公寓或遺漏的元件。因此,您不應該要封鎖呼叫從 Visual Basic 所撰寫的元件。

其他相關資訊

元件的執行緒模型是公寓住在單一執行緒的公寓 (STA)。多個 COM 物件執行個體可以住在相同的 STA。但是,沒有只有一個執行緒 (因此名稱),服務在該公寓中的所有 COM 物件實例。如果您從那些 COM 物件執行個體的其中一個封鎖呼叫,其他 COM 物件執行個體被 starved 因為僅能服務的執行緒封鎖。

您應該進行封鎖呼叫從有空閒的執行緒模型的元件。這個元件居住在多執行緒公寓 (MTA)。像 [STA 多個 COM 物件執行個體可以住在一個 MTA。不過,MTA 有多個服務其 COM 物件執行個體的執行緒。如此一來當這個 COM 物件執行個體進行封鎖呼叫,其他執行緒可以服務其他 COM 物件執行個體。這些執行緒可以甚至服務之 COM 物件執行個體,可封鎖呼叫。因此,要您居住的元件在 MTA 執行緒安全中,您應該保護與同步處理物件的全域資料。

當從一個 STA 的 COM 物件執行個體,都位於 MTA 中,而它會封鎖呼叫一個 COM 物件執行個體上呼叫方法時,STA 元件不會封鎖。這是因為當 STA 元件進行透過 COM Proxy 呼叫,Proxy 傳送關閉資料至 MTA 和 COM 幫浦訊息中 「 STA,讓它可以執行其他工作在其公寓。(在 STA 公寓工作到達透過視窗訊息)。不同的執行緒,MTA 中挑選 COM 呼叫,透過虛設常式,並使依次可有效地在等候 」 狀態中放入執行緒在封鎖呼叫 COM 物件個體上呼叫方法。時封鎖呼叫會傳回,COM 方法完成其工作,並將資料回返回虛設常式會傳回資料到 Proxy 透過視窗訊息。在 STA 執行緒中的 Proxy 挑選中的視窗訊息資料,並將其傳送傳回至呼叫的元件。

在一個 STA 長封鎖呼叫的另一個副作用是 RPC 通訊與 STA 透過視窗訊息。封鎖呼叫阻礙了連同任何其他潛在的視窗訊息可能屬於該執行緒的通訊。

?考

如需在 COM 執行緒處理的詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
136885資訊: OLE 的執行緒必須分派訊息
如需有關分散式 COM (DCOM) 架構的詳細資訊,請參閱下列 Microsoft 平台軟體開發套件 (SDK) 文件]:
http://msdn.microsoft.com/en-us/library/ms809311.aspx

屬性

文章編號: 291837 - 上次校閱: 2001年7月12日 - 版次: 1.3
這篇文章中的資訊適用於:
  • Microsoft COM+ 2.0 Standard Edition
關鍵字:?
kbmt kbclientserver kbinfo kbinprocsvr kbthread KB291837 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:291837
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com