ActiveX и незавершающийся процесс Compas.Exe

Автор onotole, 27.04.11, 21:32:36

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

onotole

При написании программы на C# возникла проблема: добавляю ActiveX контрол на форму, все работает, все хорошо. Но после того как закрываю приложение, в процессах остается висеть, созданный в ходе работы программы процесс Compas.Exe. При повторном запуске прграммы выдается сообщение об ошибке, которое пропадает лишь после того, как данный процесс будет "убит". При этом, при повторных запусках так же создаются новые процессы Compas.Exe.
Процесс, как я понял, запускается при инициализации ActiveX контрола, т.е. даже если фактически с контролом не работаешь - запустил программу и тут же ее закрыл.
VS2008+K12+W7U

333


onotole

что вы понимаете под KompasObject: ActiveX элемент или объект Компаса(документ, модель и тп)? Если объект Компаса, то я его не создаю - чисто инициализация ActiveX элемента, для которого имеется метод Dispose (аналог quit наверное), который "разрушает" объект. Данный метод отрабатывает нормально - обект уничтожается, но процесс остается висеть.
Если сперва запустить сам Компас, а  затем приложение, то, как я понял, поток, который генерируется в результате работы ActiveX (а точнее инициализации), запускается в рамках потока Компаса. При попытке закрыть Комас выдается сообщение о работающем ActiveX элементе и 50/50, либо ActiveX продолжает работать, либо не работает. Если же закрыть приложение, а затем сам Компас - то все нормально - процесс завершается.
Ноги, скорее всего, растут из Interop. Откуда точнее - скорее всего ответ на вопрос.

onotole

проблема решена:

this.axKGAX1.CloseAll();
Kompas6API5.Application apl = axKGAX1.GetKompasObject();
apl.Quit();
apl = null;

if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);