كيفية استخدام التنفيذ التلقائي لبرنامج 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)