Share via


Office'te iş parçacığı desteği

Bu makalede, Microsoft Office nesne modelinde iş parçacığı oluşturmanın nasıl desteklendiği hakkında bilgi sağlanır. Office nesne modeli iş parçacığı güvenli değildir, ancak bir Office çözümünde birden çok iş parçacığıyla çalışmak mümkündür. Office uygulaması lications, Bileşen Nesne Modeli (COM) sunucularıdır. COM, istemcilerin rastgele iş parçacıklarında COM sunucularını çağırmasına olanak tanır. İş parçacığı güvenli olmayan COM sunucuları için COM, eş zamanlı çağrıları seri hale getirmek için bir mekanizma sağlar, böylece sunucuda her zaman yalnızca bir mantıksal iş parçacığı yürütülür. Bu mekanizma tek iş parçacıklı daire (STA) modeli olarak bilinir. Çağrılar seri hale getirildiğinden, sunucu meşgulken veya arka plan iş parçacığındaki diğer çağrıları işlerken arayanlar belirli sürelerle engellenebilir.

Şunlar için geçerlidir: Bu konudaki bilgiler belge düzeyi projeler ve VSTO Eklenti projeleri için geçerlidir. Bkz. Office uygulaması ve proje türüne göre kullanılabilen özellikler.

Birden çok iş parçacığı kullanılırken gereken bilgi

Birden çok iş parçacığıyla çalışmak için, çoklu iş parçacığı kullanmanın aşağıdaki yönleri hakkında en az temel bilgiye sahip olmanız gerekir:

  • Windows API'leri

  • COM çok iş parçacıklı kavramlar

  • Eşzamanlılık

  • Eşitleme

  • Hazırlama

    Çoklu iş parçacığı kullanımı hakkında genel bilgi için bkz . Yönetilen iş parçacığı oluşturma.

    Office ana STA'da çalışır. Bunun etkilerini anlamak, Office ile birden çok iş parçacığının nasıl kullanılacağını anlamanıza olanak sağlar.

Temel çoklu iş parçacığı kullanımı senaryosu

Office çözümlerindeki kodlar her zaman ana kullanıcı arabirimi iş parçacığında çalışır. Arka plan iş parçacığında ayrı bir görev çalıştırarak uygulama performansını düzeltmek isteyebilirsiniz. Amaç, bir görevin ardından diğerinin ardından gelen görev yerine görünüşte aynı anda iki görevi tamamlamaktır ve bu da daha sorunsuz yürütmeye (birden çok iş parçacığı kullanmanın ana nedeni) neden olmalıdır. Örneğin, olay kodunuz ana Excel kullanıcı arabirimi iş parçacığında olabilir ve arka plan iş parçacığında bir sunucudan veri toplayan ve Excel kullanıcı arabirimindeki hücreleri sunucudaki verilerle güncelleştiren bir görev çalıştırabilirsiniz.

Office nesne modeline çağrıda bulunan arka plan iş parçacıkları

Arka plan iş parçacığı Office uygulaması'a çağrı yaptığında, çağrı otomatik olarak STA sınırı boyunca sıralanır. Ancak, Office uygulaması lication'ın arka plan iş parçacığının yaptığı sırada çağrıyı işleyebileceği garanti değildir. Birkaç olasılık vardır:

  1. Office uygulaması,çağrının girme fırsatına sahip olması için iletileri pompalamalıdır. Verim sağlamadan ağır işlem yapıyorsa bu işlem zaman alabilir.

  2. Dairede zaten başka bir mantıksal iş parçacığı varsa, yeni iş parçacığı giremez. Bu durum genellikle bir mantıksal iş parçacığı Office uygulaması lication'a girdiğinde ve ardından çağıranın dairesine yeniden giriş yapan bir çağrı yaptığında ortaya çıkar. Uygulama bu çağrının döndürülmesi için beklerken engellendi.

  3. Excel, gelen bir çağrıyı hemen işleyemeyecek şekilde bir durumda olabilir. Örneğin, Office uygulaması lication kalıcı bir iletişim kutusu görüntülüyor olabilir.

    2 ve 3 olasılıkları için COM, IMessageFilter arabirimini sağlar. Sunucu bunu uygularsa, tüm çağrılar HandleIncomingCall yöntemi aracılığıyla girer. 2 olasılığı için aramalar otomatik olarak reddedilir. 3 olasılığı için sunucu, koşullara bağlı olarak çağrıyı reddedebilir. Çağrı reddedilirse, arayan ne yapacağına karar vermelidir. Normalde, çağıran IMessageFilter uygular, bu durumda RetryRejectedCall yöntemi tarafından reddedildiği bildirilir.

    Ancak, Visual Studio'daki Office geliştirme araçları kullanılarak oluşturulan çözümler söz konusu olduğunda, COM birlikte çalışma reddedilen tüm çağrıları bire dönüştürür COMException ("İleti filtresi uygulamanın meşgul olduğunu gösteriyordu"). Arka plan iş parçacığında bir nesne modeli çağrısı yaptığınızda, bu özel durumu işlemeye hazır olmanız gerekir. Bu genellikle belirli bir süre yeniden denemeyi ve ardından bir iletişim kutusunun görüntülenmesini içerir. Bununla birlikte, arka plan iş parçacığını STA olarak oluşturabilir ve ardından bu iş parçacığı için bu olayı işlemek üzere bir ileti filtresi kaydedebilirsiniz.

İş parçacığını doğru başlatma

Yeni bir STA iş parçacığı oluşturduğunuzda, iş parçacığını başlatmadan önce apartman durumunu STA olarak ayarlayın. Aşağıdaki kod örneği bunun nasıl yapılacağını gösterir.

System.Threading.Thread t = new System.Threading.Thread(AnObject.aMethod);

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

Daha fazla bilgi için bkz . Yönetilen iş parçacığı oluşturma en iyi yöntemleri.

Modsuz formlar

Modsuz form, form görüntülenirken uygulamayla bir tür etkileşime izin verir. Kullanıcı formla etkileşim kurar ve form kapatmadan uygulamayla etkileşim kurar. Office nesne modeli yönetilen modsuz formları destekler; ancak arka plan iş parçacığında kullanılmamalıdır.