Что касается ExecuteEngineException, в SDK .net framework есть следующее описание:
«Ошибки механизма выполнения являются фатальными ошибками и никогда не должны возникать. Такие ошибки в основном возникают, когда механизм выполнения поврежден или данные потеряны. Система выдаст это исключение в любое время. Когда это возможно, система выдает исключение, которое предоставляет больше информации, чем исключение ExecutionEngineException.
Приложения не должны генерировать исключение ExecutionEngineException.
Как видно из этого описания, исключение ExecutionEngineException не должно быть возможным в обычной программе, что является фатальной ошибкой. Однако сегодня я много раз сталкивался с этой аномалией.
Конкретная ситуация примерно такая: элемент управления COM с функцией просмотра, используемый в .net. В этом средстве просмотра есть функция, заключающаяся в том, что при возникновении определенных изменений в текущей визуальной области будут запускаться два события. В более конкретных случаях разница во времени между срабатыванием этих двух событий может быть очень маленькой и происходить практически одновременно. В это время вероятность того, что внешняя программа .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