Podpora práce s vlákny v systému Office

Toto téma obsahuje informace o jak vláken je podporována v modelu objektu Microsoft Office.Model objektu Office není vláken, ale je možné pracovat s více vlákny v řešení Office.Aplikace sady Office jsou servery modelu COM (Component Object).COM umožňuje klientům servery COM volat na libovolného vlákna.Pro servery COM, které nejsou bezpečné podprocesy COM poskytuje mechanismus serializuje souběžných volání tak, aby pouze jeden logický podproces spustí na serveru kdykoli.Tento mechanismus je označováno jako model s jedním podprocesem apartment (STA).Protože jsou serializovat volání, může volající blokovány dobu, zatímco server je zaneprázdněn nebo je zpracování jiné volání na pozadí podproces.

Platí pro: Informace v tomto tématu se vztahují na projekty na úrovni dokumentu i na úrovni aplikace v Office 2013 a v Office 2010. Další informace najdete v tématu Dostupné funkce podle aplikací systému Office a typů projektu.

Znalosti požadované při použití více vláken

Práce s více vlákny, musíte mít alespoň základní znalosti následující aspekty multithreading:

  • Rozhraní API systému Windows

  • COM s více podprocesy koncepty

  • Souběžnost

  • Synchronizace

  • Zařazování

Obecné informace o multithreading, viz Použití více vláken v komponentách.

Office se spustí v hlavní algoritmus STAPrincipy důsledky tohoto umožňuje porozumět použití více vláken se sadou Office.

Základní scénář pro Multithreading

Kód v řešeních Office je vždy spuštěn na hlavní podproces uživatelského rozhraní.Můžete vyhladit výkon aplikací pomocí úlohy samostatné vlákno pozadí.Cílem je provést dva úkoly zdánlivě najednou místo jednoho úkolu následuje, což by mělo vést ke spuštění hladší (hlavní důvod pro použití více vláken).Například může mít kód události na hlavní podproces uživatelského rozhraní aplikace Excel a na pozadí podproces může spustit úlohu, která shromažďuje data ze serveru a buňky v uživatelském rozhraní aplikace Excel aktualizuje data ze serveru.

Pozadí podprocesů volání do objektového modelu Office

Při volání aplikace Office podprocesem na pozadí, je volání automaticky zařazována přes hranice STA.Je však zaručeno, že aplikace sady Office může zpracovat volání v době, které že usnadňuje podprocesem na pozadí.Existuje několik možností:

  1. Aplikace sady Office musí čerpadlo zpráv pro volání máte možnost zadat.Pokud je to těžké, aniž by to získávání čas trvat.

  2. Pokud jiný logický podproces již apartment, nelze zadat nové vlákno.Často děje při logický podproces zadá aplikace sady Office a potom provádí volání zpět do volajícího apartment.Aplikace je blokován čekání na volání, že vrátíte.

  3. Aplikace Excel může být ve stavu tak, že nemůže zpracovat ihned příchozí volání.Například aplikace Office může být zobrazení modální dialogové okno.

Poskytuje možnosti 2 a 3 COM IMessageFilter rozhraní.Pokud jej implementuje serveru, zadejte všechna volání prostřednictvím HandleIncomingCall metoda.Pro možnost 2 jsou volání automaticky odmítnuta.Možnost 3 serveru zamítnout volání podle okolností.Pokud volání je odmítnuto, volající musí rozhodnout, co dělat.Obvykle implementuje volající IMessageFilter, v takovém případě by oznámení o odmítnutí RetryRejectedCall metoda.

Nicméně v případě řešení vytvořené pomocí nástroje pro vývoj Office v sadě Visual Studio, COM interop převede všechny odmítnuté volání COMException ("filtr zprávy označené aplikace je zaneprázdněna").Vždy, když provedete volání objektového modelu v podprocesu pozadí musí být připraveni tuto výjimku.Obvykle zahrnuje, pro určité množství opakování a potom zobrazení dialogového okna.Můžete však také vytvořit vlákno pozadí jako STA a pak zaevidovat filtr zpráv pro tento případ zpracovat podproces.

Správnému podprocesu

Při vytváření nového vlákna STA nastavte stav apartment STA před spustit podproces.Následující příklad kódu ukazuje jak toto provést.

Dim t As New System.Threading.Thread(AddressOf AnObject.aMethod)

t.SetApartmentState(System.Threading.ApartmentState.STA)
t.Start()
System.Threading.Thread t = new System.Threading.Thread(AnObject.aMethod);

t.SetApartmentState(System.Threading.ApartmentState.STA);
t.Start();

Další informace naleznete v tématu Doporučené postupy spravovaného dělení na vlákna.

Nemodální formulářů

Nemodální umožňuje některé typ interakce s aplikací při zobrazení formuláře.Interakci uživatele s formuláři a formulář spolupracuje s aplikací bez uzávěrky.Model objektu Office podporuje spravované nemodální formuláře; však neměl používají vláknem na pozadí.

Viz také

Další zdroje

Použití více vláken v komponentách

Dělení na spravovaná vlákna

Dělení na vlákna (C# and Visual Basic)

Použití vláken a dělení na vlákna

Navrhování a tvorba řešení pro systém Office