Bezüglich ExecuteEngineException gibt es diese Beschreibung im .net Framework SDK:
„Fehler der Ausführungs-Engine sind schwerwiegende Fehler und sollten niemals auftreten. Solche Fehler treten hauptsächlich auf, wenn die Ausführungs-Engine beschädigt ist oder Daten verloren gehen. Das System wird diese Ausnahme jederzeit auslösen.“ Wenn möglich, löst das System eine Ausnahme aus, die mehr Informationen als die ExecutionEngineException liefert.
Wie
aus dieser Beschreibung hervorgeht, sollte die ExecutionEngineException in einem normalen Programm nicht möglich sein. Heute bin ich jedoch mehrmals auf diese Anomalie gestoßen.
Die konkrete Situation sieht ungefähr so aus: ein COM-Steuerelement mit Viewer-Funktion, das in .net verwendet wird. Dieser Viewer verfügt über die Funktion, dass bei bestimmten Änderungen im aktuellen visuellen Bereich zwei Ereignisse ausgelöst werden. In spezifischeren Fällen kann der Zeitunterschied zwischen der Auslösung dieser beiden Ereignisse sehr gering sein und fast gleichzeitig stattfinden. Zu diesem Zeitpunkt ist die Wahrscheinlichkeit, dass das äußere .net-Programm eine ExecutionEngineException verursacht, sehr hoch. Grundsätzlich wird es bei jedem Vorgang mindestens einmal angetroffen, und natürlich kann es nur einmal angetroffen werden, denn sobald es angetroffen wird wird fast abstürzen.
Es sollte immer noch ein Problem sein, das auftritt, wenn .net mit COM interagiert. Obwohl ich den spezifischen Prozess nicht kenne, können Sie ungefähr vermuten: Wenn das erste Ereignis auftritt, beginnt .net mit der Verarbeitung und bevor die Verarbeitung abgeschlossen ist. Das zweite Ereignis Der Vorfall ereignete sich erneut und die Anomalie war geboren.
Es ist einfacher zu handhaben, wenn man den Grund kennt. Fügen Sie einen Ereignisunterbrechungsmechanismus hinzu, damit das auslösende Zeitintervall zweier beliebiger Ereignisse nicht zu klein wird, um zu vermeiden, dass zwei Ereignisse fast gleichzeitig ausgelöst werden. Tatsächlich trat diese Anomalie nach einem Versuch nicht mehr auf. Wenn Sie auf ein ähnliches Phänomen stoßen, können Sie diese Idee auch ausprobieren.
PS: Die Umgebung, die ich hier verwende, ist .net Framework 1.1. Es ist noch nicht bekannt, ob das gleiche Phänomen unter .net Framework 2.0 auftritt.
http://www.cnblogs.com/sunwaywei/archive/2006/08/21/482674.html