Con respecto a ExecuteEngineException, existe esta descripción en el SDK de .net framework:
"Los errores del motor de ejecución son errores fatales y nunca deberían ocurrir. Estos errores ocurren principalmente cuando el motor de ejecución está dañado o se pierden datos. El sistema generará esta excepción en cualquier momento Cuando sea posible, el sistema generará una excepción que proporciona más información que ExecutionEngineException.
Las aplicaciones no deberían generar ExecutionEngineException.
Como se puede ver en esta descripción, ExecutionEngineException no debería ser posible en un programa normal. Sin embargo, hoy me encontré con esta anomalía muchas veces.
La situación específica es más o menos así: un control COM con función de visor, utilizado en .net. Este Visor tiene una característica que cuando ocurren ciertos cambios en el área visual actual, se activarán dos eventos. En casos más específicos, la diferencia de tiempo entre la activación de estos dos eventos puede ser muy pequeña, casi sucediendo al mismo tiempo. En este momento, la posibilidad de que el programa .net externo provoque una ExecutionEngineException se vuelve muy alta. Básicamente, se encontrará al menos una vez en cada operación y, por supuesto, solo se puede encontrar una vez, porque una vez que se encuentra, se produce. casi se estrellará.
Todavía debería ser un problema que ocurre cuando .net interactúa con COM. Aunque no conozco el proceso específico, se puede adivinar aproximadamente: cuando ocurre el primer evento, .net comienza a procesarlo y antes de que se complete el procesamiento. El segundo evento El incidente volvió a ocurrir y nació la anomalía.
Es más fácil de manejar si conoces el motivo. Agregue un mecanismo de suspensión de eventos para que el intervalo de tiempo de activación de dos eventos cualesquiera no sea demasiado pequeño para evitar la recurrencia de dos eventos que se activan casi al mismo tiempo. Efectivamente, después de un intento, esta anomalía ya no ocurrió. Si encuentra un fenómeno similar, también puede probar esta idea.
PD: el entorno que estoy usando aquí es .net framework 1.1. Aún no se sabe si ocurre el mismo fenómeno en .net framework 2.0.
http://www.cnblogs.com/sunwaywei/archive/2006/08/21/482674.html