Тема: Латентная ошибка в Terminate()

Убиваю классически:

public void Terminate()
{
    DocumentCollection Docs = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager;
    if (Docs != null)
    {
        Docs.DocumentCreated -= new DocumentCollectionEventHandler(onDocumentCreated);
        Docs.DocumentToBeDestroyed -= new DocumentCollectionEventHandler(onDocumentToBeDestroyed);
    }
}

Всё бы ничего, но идёт плевок на строчку

Docs.DocumentCreated -= new DocumentCollectionEventHandler(onDocumentCreated);

Причём плевок скрытый - никаких раздражающих окошек, только характерный звук в динамиках когда Автокад полностью исчезает со сцены. Причем звук слышен не на всех версиях.
Стал копать. В отладчике выяснилось член Docs.m_pDocumentCreatedEvent = null.
Кто-нибудь сталкивался с таким?
Может просто очистить Terminate() от лишнего кода?

Re: Латентная ошибка в Terminate()

Debalance пишет:

Может просто очистить Terminate() от лишнего кода?

Конечно. Terminate должен вызываться, когда уже и документов то нет. А тем более реакторов на них.

Re: Латентная ошибка в Terminate()

Александр Ривилис пишет:

Конечно. Terminate должен вызываться, когда уже и документов то нет. А тем более реакторов на них.

И тем не менее выглядит не совсем логично... Казалолось бы, то что создали в Initialize() убиваем в Terminate().
Ну а как на счет Docs.DocumentToBeDestroyed -= new DocumentCollectionEventHandler(onDocumentToBeDestroyed)? Там всё в порядке!

Re: Латентная ошибка в Terminate()

Не могу сказать, что вижу тут какую-то логику. С учетом того, что .NET-сборки из AutoCAD выгрузить невозможно и метод Terminate вызывается только при завершении AutoCAD я бы вообще советовал не убирать обработчики событий - не имеет смысла.

Re: Латентная ошибка в Terminate()

Александр Ривилис пишет:

... я бы вообще советовал не убирать обработчики событий - не имеет смысла.

Так и сделаем. Спасибо!