Здравствуйте!
Разбираясь с жалобой пользователя на зависание Civil 3D из-за моего приложения, обнаружил неприятную особенность срабатывания в нем события DocumentActivationChanged. Для тестов написал вот такой код:
- using Autodesk.AutoCAD.Runtime; 
- using Autodesk.AutoCAD.ApplicationServices; 
- using Autodesk.AutoCAD.EditorInput; 
-   
-   
- namespace AcadTest 
- { 
-     public class DocumentActivationTest 
-     { 
-         static ulong count = 0; 
-         static bool launched = false; 
-   
-         [CommandMethod("RunDocActivateTest")] 
-         public void Run() 
-         {            
-             DocumentCollection docMgr = Application.DocumentManager; 
-             if (!launched) 
-             { 
-                 docMgr.DocumentActivationChanged += docMgr_DocumentActivationChanged; 
-                 launched = true; 
-             } 
-         } 
-   
-         [CommandMethod("StopDocActivateTest")] 
-         public void Stop() 
-         { 
-             DocumentCollection docMgr = Application.DocumentManager; 
-             if (launched) 
-             { 
-                 docMgr.DocumentActivationChanged -= docMgr_DocumentActivationChanged; 
-                 launched = false; 
-             } 
-         } 
-   
-         [CommandMethod("DocActivateCounterReset")] 
-         public void CounterReset() 
-         { 
-             count = 0; 
-         } 
-   
-         [CommandMethod("DocActivateCountShow")] 
-         public void CounterShow() 
-         { 
-             Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; 
-             ed.WriteMessage("\nDocumentActivationChanged events: {0}", count); 
-         } 
-   
-         void docMgr_DocumentActivationChanged(object sender, DocumentActivationChangedEventArgs e) 
-         {             
-             count++; 
-         } 
-     } 
- } 
-   
Его работу проверил в голом AutoCAD и в Civil 3D. По идее, разницы быть не должно, но она есть! Причем, очень ощутимая.
Вот видеоотчет по тестированию.
AutoCAD: 
https://screencast.autodesk.com/main/details/41db8829-5277-4d90-89be-c4c054824d86Civil 3D: 
https://screencast.autodesk.com/Main/Details/3c90c294-7183-4331-9100-a7c380f55b5eПолучается, что в Civil 3D событие активации документа происходит гораздо чаще! Причем, даже тогда, когда его не должно быть. В видео показан пример - вызов контекстного меню, когда есть выбранные в чертеже объекты. В примере всего несколько объектов, в реальном чертеже у нас их несколько сотен тысяч. А так как у меня происходит некоторая обработка этого события, которая занимает доли секунды, в сумме получается колоссальное зависание (я минут 10 ждал, потом просто завершил процесс acad.exe из диспетчера задач Windows).
Есть, правда, подозрение, что это какое-то мое другое приложение шалит. Поэтому, если у кого-то есть возможность - прошу проверить повторится ли эта ситуация у вас.
Спасибо.