قاعدة المعارف KB0203

كيفية استخدام التنفيذ التلقائي لبرنامج Office من تعليمات برمجية مدارة (C#، وVisual Basic، و.NET)

المشكلة

يقوم برنامج Office باستخدام COM للكشف عن كائنات التنفيذ التلقائي. في التعليمات البرمجية المدارة، على النحو المستخدم في C # وVisual Basic، يتم تجميع كائنات COM في Runtime Callable Wrappers (RCW). دون أي إجراء خاص من جانب المبرمج، لا يتم تحرير كائنات COM المجمعة في RCW سوى عند تجميع البيانات المهملة، والذي قد لا يحدث أبدًا في غياب الطلب على الذاكرة.

الحل

لتحرير كائنات COM بشكل قاطع، قم بتحرير كل الكائنات التي تستلمها من برنامج Office باستخدام System.Runtime.InteropServices.Marshal.ReleaseComObject بعد الانتهاء من استخدامها.

ملاحظة

  • لا تستخدم System.Runtime.InteropServices.Marshal.FinalReleaseComObject نظرًا لأنه سيؤدي إلى تحرير كائن COM حتى إذا كانت الوظائف الإضافية المدارة الأخرى لا تزال تستخدمه.

  • لا تقم بالوصول إلى كائن عبر كائن آخر، على سبيل المثال:

    // C#
    // Wrong
    PowerPoint.View view = Application.ActiveWindow.View;
    ' Visual Basic
    ' Wrong
    Dim view As PowerPoint.View = Application.ActiveWindow.View

    في هذه الحالة، يقوم ActiveWindow بإنشاء PowerPoint.DocumentWindow مؤقت لا يتم تحريره.

    بدلاً من ذلك، قم بتعيينه إلى متغير وتحريره:

    // C#
    PowerPoint.DocumentWindow wnd = Application.ActiveWindow;
    PowerPoint.View view = wnd.View;
    System.Runtime.InteropServices.Marshal.ReleaseComObject(wnd);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(view);
    ' Visual Basic
    Dim wnd As PowerPoint.DocumentWindow = Application.ActiveWindow
    Dim view As PowerPoint.View = wnd.View
    System.Runtime.InteropServices.Marshal.ReleaseComObject(wnd)
    System.Runtime.InteropServices.Marshal.ReleaseComObject(view)

مشاركة