關於ExecuteEngineException,在.Net framework SDK中有這樣的描述:
“執行引擎錯誤是致命錯誤,決不應該發生。此類錯誤主要是在執行引擎被破壞或丟失數據時發生的。系統會隨時引發此異常。在可能的情況下,系統將引發比 ExecutionEngineException 異常能提供更多信息的異常。
應用程序不應引發 ExecutionEngineException。”
從這個描述可以看出,ExecutionEngineException這個異常在正常的程序中應當是不可能發生的,致命錯誤嘛。然而我今天卻就與這個異常來了個多次碰頭。
具體情況大致是這樣的:一個具有查看器(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