ExecuteEngineException과 관련하여 .net 프레임워크 SDK에는 다음 설명이 있습니다.
"실행 엔진 오류는 치명적인 오류이므로 절대 발생해서는 안 됩니다. 이러한 오류는 주로 실행 엔진이 손상되거나 데이터가 손실될 때 발생합니다. 시스템은 언제든지 이 예외를 발생시킵니다. 가능한 경우 시스템은 ExecutionEngineException보다 더 많은 정보를 제공하는 예외를 발생시킵니다.
애플리케이션은 ExecutionEngineException을 발생시키지 않아야 합니다.
이 설명에서 볼 수 있듯이 일반 프로그램에서는 ExecutionEngineException이 발생하지 않아야 합니다. 그러나 오늘 나는 이 변칙적인 현상을 여러 번 겪었습니다.
구체적인 상황은 대략 다음과 같습니다. .net에서 사용되는 뷰어 기능이 있는 COM 컨트롤입니다. 이 뷰어에는 현재 시각적 영역에서 특정 변경이 발생하면 두 개의 이벤트가 트리거되는 기능이 있습니다. 보다 구체적인 경우에는 이 두 이벤트의 트리거 사이의 시간 차이가 거의 동시에 발생할 수 있습니다. 이때 외부 .net 프로그램이 ExecutionEngineException을 일으킬 가능성이 매우 높아집니다. 기본적으로 모든 작업에서 최소한 한 번은 발생하며, 한 번 발생하면 예외가 발생하기 때문에 당연히 한 번만 발생합니다. 거의 충돌할 것입니다.
.net이 COM과 상호 작용할 때 발생하는 문제여야 합니다. 비록 구체적인 프로세스는 모르지만 대략적으로 추측할 수 있습니다. 첫 번째 이벤트가 발생하면 .net이 이를 처리하기 시작하고, 처리가 완료되기 전에 두 번째 사건 사건이 또 발생해 변칙성이 탄생했다.
원인을 알면 처리하기가 더 쉽습니다. 거의 동시에 트리거되는 두 이벤트의 재발을 방지하기 위해 두 이벤트의 트리거 시간 간격이 너무 작지 않도록 이벤트 일시 중지 메커니즘을 추가합니다. 물론 한 번 시도한 후에는 이러한 이상 현상이 더 이상 발생하지 않았습니다. 비슷한 현상이 발생하면 이 아이디어를 시도해 보는 것이 좋습니다.
PS, 여기서 사용하고 있는 환경은 .net Framework 1.1 입니다. .net Framework 2.0에서도 같은 현상이 나타나는지는 아직 알 수 없습니다.
http://www.cnblogs.com/sunwaywei/archive/2006/08/21/482674.html