Em relação a ExecuteEngineException, há esta descrição no SDK da estrutura .net:
"Erros do mecanismo de execução são erros fatais e nunca devem ocorrer. Esses erros ocorrem principalmente quando o mecanismo de execução está danificado ou os dados são perdidos. O sistema lançará esta exceção a qualquer momento Quando possível, o sistema lançará uma exceção que fornece mais informações do que ExecutionEngineException.
Os aplicativos não devem lançar ExecutionEngineException.
Como pode ser visto nesta descrição, ExecutionEngineException não deve ser possível em um programa normal. Porém, hoje encontrei essa anomalia muitas vezes.
A situação específica é mais ou menos assim: um controle COM com função de visualizador, usado em .net. Este Viewer possui a característica de que quando ocorrerem determinadas alterações na área visual atual, dois eventos serão acionados. Em casos mais específicos, a diferença de tempo entre o disparo desses dois eventos poderá ser muito pequena, quase acontecendo ao mesmo tempo. Neste momento, a possibilidade de o programa .net externo causar uma ExecutionEngineException torna-se muito alta. Basicamente, ele será encontrado pelo menos uma vez em cada operação e, claro, só poderá ser encontrado uma vez, porque, uma vez encontrado, ele será encontrado. quase irá falhar.
Ainda deve ser um problema que ocorre quando o .net interage com o COM. Embora eu não conheça o processo específico, você pode adivinhar: quando o primeiro evento ocorre, o .net começa a processá-lo e antes que o processamento seja concluído, o segundo evento O incidente aconteceu novamente e a anomalia nasceu.
É mais fácil de lidar se você souber o motivo. Adicione um mecanismo de suspensão de eventos para que o intervalo de tempo de acionamento de quaisquer dois eventos não seja muito pequeno para evitar a recorrência de dois eventos acionados quase ao mesmo tempo. Com certeza, depois de uma tentativa, essa anormalidade não ocorreu mais. Se você encontrar um fenômeno semelhante, você também pode tentar esta ideia.
PS, o ambiente que estou usando aqui é o .net framework 1.1. Ainda não se sabe se o mesmo fenômeno ocorre no .net framework 2.0.
http://www.cnblogs.com/sunwaywei/archive/2006/08/21/482674.html