關(guān)于ExecuteEngineException,在.net framework SDK中有這樣的描述:
“執(zhí)行引擎錯(cuò)誤是致命錯(cuò)誤,決不應(yīng)該發(fā)生。此類(lèi)錯(cuò)誤主要是在執(zhí)行引擎被破壞或丟失數(shù)據(jù)時(shí)發(fā)生的。系統(tǒng)會(huì)隨時(shí)引發(fā)此異常。在可能的情況下,系統(tǒng)將引發(fā)比 ExecutionEngineException 異常能提供更多信息的異常。
應(yīng)用程序不應(yīng)引發(fā) ExecutionEngineException。”
從這個(gè)描述可以看出,ExecutionEngineException這個(gè)異常在正常的程序中應(yīng)當(dāng)是不可能發(fā)生的,致命錯(cuò)誤嘛。然而我今天卻就與這個(gè)異常來(lái)了個(gè)多次碰頭。
具體情況大致是這樣的:一個(gè)具有查看器(Viewer)功能的COM控件,在.net中使用。這個(gè)Viewer有一個(gè)特性,在當(dāng)前可視區(qū)域發(fā)生某些變化時(shí),將會(huì)觸發(fā)兩個(gè)事件,而在更特定的情況下,這兩個(gè)事件觸發(fā)的時(shí)間差可能非常之小,幾乎是同時(shí)發(fā)生。此時(shí)外層的.net程序引發(fā)ExecutionEngineException異常的可能性就變得非常之大,基本上每次操作都至少遇上一次,當(dāng)然也只能遇上一次,因?yàn)橐挥錾暇筒畈欢郈rash了。
應(yīng)該還是在.net與COM交互時(shí)發(fā)生的問(wèn)題,雖然不清楚具體過(guò)程,也可以大概猜想一下:當(dāng)?shù)谝粋€(gè)事件發(fā)生的時(shí)候,.net開(kāi)始對(duì)它進(jìn)行處理,沒(méi)等處理完畢,第二個(gè)事件又發(fā)生了,異常也就誕生了。
知道原因就好辦。加入一個(gè)事件掛起機(jī)制,使得任意兩個(gè)事件的觸發(fā)時(shí)間間隔不會(huì)太小,避免兩個(gè)事件幾乎同時(shí)觸發(fā)的情況再次發(fā)生。果然,一試之下再也沒(méi)有出現(xiàn)這個(gè)異常了。如果有遇上類(lèi)似現(xiàn)象的,不妨用這個(gè)思路試一下。
PS,這里我使用的環(huán)境是.net framework 1.1,目前尚不知在.net framework 2.0下是否有同樣的現(xiàn)象。
http://m.survivalescaperooms.com/sunwaywei/archive/2006/08/21/482674.html
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注