Obsługa wątkowości w pakiecie Office

Ten temat zawiera informacje dotyczące sposobu wątków jest obsługiwane w modelu obiektów programu Microsoft Office.Model obiektu pakietu Office nie jest bezpieczne dla wątków, ale istnieje możliwość pracy z wielu wątków w roztworze pakietu Office.Aplikacje pakietu Office są serwery Component Object Model (COM).COM umożliwia klientom wywoływanie serwerów COM na wątki dowolnego.Dla serwerów COM, które nie są bezpieczne dla wątków COM oferuje mechanizm do serializacji równoczesnych połączeń, tak aby tylko jeden wątek logiczny jest wykonywany na serwerze w dowolnym momencie.Mechanizm ten jest znany jako model jednowątkowym apartamencie (STA).Ponieważ są szeregowane wywołania, dzwoniący może być blokowany przez okres czasu, podczas, gdy serwer jest zajęty lub jest obsługa innych wzywa wątek tła.

Zastosowanie: Informacje przedstawione w tym temacie mają zastosowanie do projektów na poziomie dokumentu i aplikacji obsługiwanych w pakietach Office 2013 i Office 2010. Zobacz Funkcje dostępne w aplikacjach pakietu Office i typ projektu.

Wymagana znajomość podczas korzystania z wielu wątków

Aby pracować z wieloma wątkami, musi mieć co najmniej podstawowa znajomość następujące aspekty wielowątkowość:

  • Interfejsy API systemu Windows

  • COM pojęcia wielowątkowe

  • Współbieżność

  • Synchronizacja

  • Kierowanie

Aby uzyskać ogólne informacje o wielowątkowość, zobacz Wielowątkowość w składnikach.

Urząd działa w głównym STA.Opis konsekwencje tego umożliwia zrozumieć, jak korzystać z wielu wątków z pakietem Office.

Podstawowy scenariusz wielowątkowość

Kod w rozwiązaniach dla pakietu Office zawsze działa w głównym wątku interfejsu użytkownika.Można wygładzić wydajność aplikacji uruchamiając oddzielnych zadań na wątek w tle.Celem jest dwóch zadań pozornie jednocześnie zamiast jednego zadania a z drugiej strony, następnie, co powinno spowodować wykonanie płynność (głównym powodem korzystania z wielu wątków).Na przykład Twój kod zdarzenia może mieć w głównym wątku interfejsu użytkownika programu Excel, a na wątek w tle może uruchomić zadania, który zbiera dane z serwera i aktualizuje komórek w interfejsie użytkownika programu Excel z danymi z serwera.

Wątków w tle, odwołujących się do modelu obiektów pakietu Office

Gdy wątek tła dzwoni do aplikacji pakietu Office, wywołanie jest automatycznie organizowanego między granicą STA.Jednakże nie ma żadnej gwarancji, że aplikacja pakietu Office może obsłużyć wywołania w czasie, to sprawia, że wątek tła.Istnieje kilka możliwości:

  1. Aplikacja pakietu Office należy pompy wiadomości dla wywołania mają możliwość wejścia.Jeśli robi ciężkich przetwarzania bez ulegania to zajmie czasu.

  2. Jeśli inny wątek logiczny jest już w mieszkaniu, nie można wprowadzić nowy wątek.Dzieje się tak często, gdy logiczny wątek wchodzi aplikacji pakietu Office, a następnie wprowadza współużytkowane wywołanie apartament obiektu wywołującego.Aplikacja została zablokowana, czeka na powrót z tego wywołania.

  3. Program Excel może być w stanie, takie, że to od razu nie może obsługiwać połączenia przychodzącego.Na przykład aplikacja pakietu Office może być wyświetlanie modalne okno dialogowe.

Możliwości, 2 i 3, zapewnia COM IMessageFilter interfejsu.Jeśli serwer implementuje on, wszystkie połączenia wejść przez HandleIncomingCall metoda.Możliwość 2 wywołania są automatycznie odrzucane.Na możliwość 3 serwer może odrzucić wezwanie, w zależności od okoliczności.Jeśli wywołanie jest odrzucane, wywołujący musi zdecydować, co należy zrobić.Normalnie, implementuje wywołujący IMessageFilter, w którym to przypadku będzie otrzymywać powiadomienia o odrzuceniu przez RetryRejectedCall metoda.

Jednakże w przypadku rozwiązania utworzone za pomocą narzędzi programistycznych pakietu Office w programie Visual Studio, usługa międzyoperacyjna modelu COM konwertuje wszystkie odrzucone wywołania COMException ("filtr wiadomości wykazał że aplikacja jest zajęta").Gdy należy wywołać model obiektowy na wątek tła musi być przygotowany do obsługi tego wyjątku.Zazwyczaj, który obejmuje ponawianie przez pewien czas, a następnie wyświetlenia okna dialogowego.Jednakże można również utworzyć wątek w tle jako STA, a następnie zarejestruj filtr wiadomości dla tego wątku do obsługi tej sprawy.

Poprawne uruchomienie wątku

Podczas tworzenia nowego wątku STA stan jest ustawiany apartament STA przed rozpoczęciem wątku.Poniższy przykład kodu demonstruje, jak to zrobić.

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();

Aby uzyskać więcej informacji, zobacz Zarządzana wątkowość — najlepsze rozwiązania.

Niemodalne formularze

Niemodalny formularz pozwala pewnego rodzaju interakcji z aplikacją, podczas gdy formularz jest wyświetlany.Użytkownik współdziała z formularza i formularz współdziała z aplikacji bez zamknięcia.Model obiektu pakietu Office obsługuje zarządzanych niemodalne formularze; Jednakże powinny one nie być stosowane na wątek w tle.

Zobacz też

Inne zasoby

Wielowątkowość w składnikach

Zarządzana wątkowość

Wątkowość (C# i Visual Basic)

Używanie wątków i wątkowości

Projektowanie i tworzenie rozwiązań Office