مشاركة عبر


دعم مؤشر الترابط في Office

ينطبق على

تنطبق المعلومات الموجودة في هذا الموضوع فقط على أنواع المشاريع وإصدارات Microsoft Office التالية: لمزيد من المعلومات، راجع الميزات المتوفرة بواسطة تطبيقات Office و نوع المشروع.

نوع المشروع

  • مشروعات على مستوى المستند

  • مشروعات على مستوى التطبيق

إصدار Microsoft Office

  • نظام 2007 Microsoft Office

  • Microsoft Office 2010

يوفر هذا الموضوع معلومات حول كيفية دعم مؤشر الترابط في نموذج كائن Microsoft Office. نموذج كائن Office ليس آمناً من جهة مؤشر الترابط، لكن من الممكن العمل مع مؤشرات ترابط متعددة في حل Office. تطبيقات Office هي خوادم نموذج كائن مكوّن (COM). يسمح COM للعملاء باستدعاء خوادم COM على مؤشرات ترابط عشوائية. لخوادم COM غير الآمنة من جهة مؤشر الترابط، يوفر COM آلية لتسلسل الاستدعاءات المتزامنة بحيث يتم تنفيذ مؤشر ترابط منطقي واحد فقط على الخادم في أي وقت. تعرف هذه الآلية بنموذج مؤشر ترابط غرفة مفرد (STA). لأنه يتم تسلسل الاستدعاءات، فإن المستدعين قد يتم حظرهم لفترات زمنية أثناء انشغال الخادم أو معالجة استدعاءات أخرى على مؤشر ترابط خلفي.

المعرفة المطلوبة عند استخدام مؤشرات ترابط متعددة

للعمل مع مؤشرات ترابط متعددة، يجب أن يكون لديك على الأقل معرفة أساسية بأوجه تعدد مؤشرات الترابط التالية:

  • Windows APIs

  • مفاهيم COM متعددة مؤشرات الترابط

  • التزامن

  • المزامنة

  • التنظيم والإرسال

للمزيد من المعلومات العامة عن تعدد مؤشرات الترابط، راجع multithreading في المكونات.

يعمل Office في STA الرئيسي. فهم تبعات ذلك يجعل من الممكن فهم كيفية استخدام عدة مؤشرات ترابط فى Office.

سيناريو تعدد مؤشرات الترابط الأساسي

يتم تشغيل التعليمات البرمجية في حلول Office دومًا على مؤشر ترابط واجهة المستخدم الرئيسي. قد تحتاج لجعل أداء التطبيق أكثر انسيابية بواسطة تشغيل مهمة منفصلة على مؤشر الترابط الخلفى. الهدف هو إكمال مهمتين كأنهما واحدة بدلاً من مهمة واحدة متبوعة بأخرى، مما يجب أن يؤدى إلي تنفيذ أكثر انسيابية (السبب الرئيسي لاستخدام مؤشرات ترابط متعددة). على سبيل المثال، قد يكون لديك تعليمات الحدث البرمجية الخاصة بك على مؤشر ترابط واجهة مستخدم Excel الرئيسية، وعلى مؤشر الترابط خلفي قد تقوم بتشغيل مهمة تجمع بيانات من خادم وتحدث خلايا في واجهة مستخدم Excel بالبيانات من الخادم.

مؤشرات الترابط الخلفية التي تستدعي نموذج كائن Office

عندما يقوم مؤشر ترابط خلفي باستدعاء لتطبيق Office، يتم تنظيم الاستدعاء تلقائيًا عبر حدود STA. ومع ذلك، ليس هناك أي ضمان أن تطبيق Office يمكنه معالجة الاستدعاء في الوقت الذي يقوم مؤشر الترابط الخلفي بعمله. توجد عدة احتمالات:

  1. يجب على تطبيق Office ضخ رسائل للاستدعاء ليكون لديه فرصة الدخول. إذا كان يقوم بمعالجة ثقيلة دون إخراج نتيجة فهذا قد يستهلك وقتًا.

  2. إذا كان مؤشر ترابط منطقي آخر موجودًا بالفعل في الغرفة، مؤشر الترابط الجديد لا يمكنه الدخول. غالباً ما يحدث هذا عند دخول مؤشر ترابط منطقي إلى تطبيق Office ثم قيامه بعمل استدعاء إعادة الإدخال مرة أخرى إلى غرفة المستدعي. تم حظر التطبيق انتظارًا لذلك الاستدعاء أن يقوم بالإرجاع.

  3. قد يكون Excel في حالة لا يمكن فيها معالجة استدعاء وارد فوراً. على سبيل المثال، تطبيق Office قد يعرض مربع حوار مشروط.

للاحتمالات 2 و3، يوفر COM الواجهة IMessageFilter. إذا كان الخادم ينفذها، يتم إدخال كافة الاستدعاءات عبر الأسلوب HandleIncomingCall. للاحتمال 2، يتم رفض الاستدعاءات تلقائيًا. للاحتمال 3، يمكن للخادم رفض الاستدعاء، بناءً على الظروف. إلى see this ملف في Visual أساسى مشاريع, انقر عرض الكل ملفات زر في الحل مستكشف. Normally, the caller implements IMessageFilter, in which case it would be notified of the rejection by the RetryRejectedCall method.

ومع ذلك، في حالة الحلول التي تم إنشاؤها بواسطة أدوات تطوير Office في Visual Studio، يحول توافق COM كافة الاستدعاءات المرفوضة إلى System.Runtime.InteropServices.COMException ("عامل تصفية الرسائل أشار إلى أن التطبيق مشغول"). عند إنشاء استدعاء نموذج كائن على مؤشر ترابط خلفي، يجب أن تكون مؤهلًا لمعالجة هذا الاستثناء. عادةً، يتضمن هذا إعادة المحاولة لمدة معينة من الوقت ثم عرض حوار. ومع ذلك، يمكنك أيضًا إنشاء مؤشر الترابط الخلفي كـ STA ثم تسجيل عامل تصفية رسائل لمؤشر الترابط هذا لمعالجة هذه الحالة.

بدء تشغيل مؤشر الترابط بشكل صحيح

عند إنشاء مؤشر ترابط STA جديد، قم بتعيين حالة الغرفة إلى STA قبل بدء مؤشر الترابط. يوضح مثال التعليمات البرمجية التالي كيفية القيام بذلك.

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

لمزيد من المعلومات، راجع إدارة مؤشر الترابط التشعبي أفضل الممارسات.

النماذج غير المشروطة

يسمح النموذج غير المشروط ببعض أنواع من التفاعل مع التطبيق أثناء عرض النموذج. يتفاعل المستخدم مع النموذج، ويتفاعل النموذج مع التطبيق دون إغلاق. يدعم نموذج كائن Office نماذج مدارة غير مشروطة. ومع ذلك، لا يجب أن يتم استخدامها على مؤشر ترابط خلفي.

راجع أيضًا:

المرجع

التأشير الترابطي ل Visual Basic و #Visual C

موارد أخرى

multithreading في المكونات

إدارة مؤشر الترابط التشعبي

multithreading في Visual Basic

تستخدم مؤشرات الترابط وكان مؤشر الترابط التشعبي

تصميم و إنشاء حلول Office