فيما يتعلق بـ ExecuteEngineException، يوجد هذا الوصف في .net Framework SDK:
"تعد أخطاء محرك التنفيذ أخطاء فادحة ويجب ألا تحدث أبدًا. تحدث مثل هذه الأخطاء بشكل أساسي عند تلف محرك التنفيذ أو فقدان البيانات. سيقوم النظام بطرح هذا الاستثناء في أي وقت عندما يكون ذلك ممكنًا، سيطرح النظام استثناءً يوفر معلومات أكثر من ExecutionEngineException.
يجب ألا تقوم التطبيقات بطرح ExecutionEngineException،
كما يتبين من هذا الوصف، لا ينبغي أن يكون ExecutionEngineException ممكنًا في برنامج عادي، وهو خطأ فادح. ومع ذلك، اليوم واجهت هذا الشذوذ عدة مرات.
الموقف المحدد هو تقريبًا مثل هذا: عنصر تحكم COM مع وظيفة العارض، المستخدم في .net. يتميز هذا العارض بميزة أنه عند حدوث تغييرات معينة في المنطقة المرئية الحالية، سيتم تشغيل حدثين. وفي حالات أكثر تحديدًا، قد يكون الفارق الزمني بين تشغيل هذين الحدثين صغيرًا جدًا، ويحدث تقريبًا في نفس الوقت. في هذا الوقت، أصبح احتمال أن يتسبب برنامج .net الخارجي في حدوث ExecutionEngineException مرتفعًا جدًا. في الأساس، ستتم مواجهته مرة واحدة على الأقل في كل عملية، وبالطبع لا يمكن مواجهته إلا مرة واحدة، لأنه بمجرد مواجهته، فإنه سيتم مواجهته مرة واحدة فقط. سوف تحطم تقريبا.
من المفترض أن تظل المشكلة تحدث عندما يتفاعل .net مع COM. على الرغم من أنني لا أعرف العملية المحددة، يمكنك التخمين تقريبًا: عند حدوث الحدث الأول، يبدأ .net في معالجته، وقبل اكتمال المعالجة، الحدث الثاني: حدث الحادث مرة أخرى، وولد الشذوذ.
من الأسهل التعامل معها إذا كنت تعرف السبب. أضف آلية تعليق الحدث بحيث لا يكون الفاصل الزمني للتشغيل لأي حدثين صغيرًا جدًا لتجنب تكرار حدثين يتم تشغيلهما في نفس الوقت تقريبًا. ومن المؤكد أنه بعد محاولة واحدة، لم يعد هذا الشذوذ يحدث. إذا واجهت ظاهرة مماثلة، فمن الأفضل أن تجرب هذه الفكرة.
ملاحظة: البيئة التي أستخدمها هنا هي .net Framework 1.1. ولم يُعرف بعد ما إذا كانت نفس الظاهرة تحدث ضمن .net Framework 2.0.
http://www.cnblogs.com/sunwaywei/archive/2006/08/21/482674.html