關於ExecuteEngineException,在.net framework SDK中有這樣的描述:
「執行引擎錯誤是致命錯誤,絕不應該發生。此類錯誤主要是在執行引擎被破壞或丟失資料時發生的。系統會隨時引發此異常。
,致命錯誤嘛。然而我今天卻與這個異常來了個多次碰頭。
具體情況大致是這樣的:一個具有檢視器(Viewer)功能的COM控件,在.net中使用。這個Viewer有一個特性,在當前視覺區域發生某些變化時,將會觸發兩個事件,而在更特定的情況下,這兩個事件觸發的時間差可能非常之小,幾乎是同時發生。此時外層的.net程式引發ExecutionEngineException異常的可能性就變得非常之大,基本上每次操作都至少遇上一次,當然也只能遇上一次,因為一遇上就差不多Crash了。
應該還是在.net與COM互動時發生的問題,雖然不清楚具體過程,也可以大概猜想一下:當第一個事件發生的時候,.net開始對它進行處理,沒等處理完畢,第二個事件又發生了,異常也就誕生了。
知道原因就好辦。加入一個事件掛起機制,使得任兩個事件的觸發時間間隔不會太小,避免兩個事件幾乎同時觸發的情況再次發生。果然,一試之下再也沒有出現這個異常了。如果有遇上類似現象的,不妨用這個思路來試試看。
PS,這裡我使用的環境是.net framework 1.1,目前尚不知在.net framework 2.0下是否有相同的現象。
http://www.cnblogs.com/sunwaywei/archive/2006/08/21/482674.html