powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Прибить COM объект
3 сообщений из 3, страница 1 из 1
Прибить COM объект
    #32758875
voodoos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть такая проблема, юзается в приложении некий COM компонент, создаётся множество его экземпляров, перед созданием нового, прибивается ссылка на старый, вот так это происходит:

public static void Select(string selectName, int address, sbyte recsOnly, ResultStepDelegate resultStep)
{
try
{
_provider._dataSource = null;
_provider._dataSource = _provider._session.SelectData(selectName, address, recsOnly);
}
catch(Exception e)
{
if(resultStep != null)
resultStep(e.Message, true);

_provider.Dispose();
_provider._lastException = e;
}
}


Где _provider._dataSource - это и есть ссылка на этот объект. Но если ссылка прибивается, то сам объект нет, так как вылетает Com Plus Exception с сообщением о том, чторесурсы исчерпаны.

Как его реально лучше прибить? Так чтоб не только ссылка на него прибивалась, но и сам объект. Пробовал после присваивания ссылке null делать ещё GC.Collect() и пробовал GC.SuppressFinalize(_provider._dataSource) - непомогает.

Есть один ньюанс, объект этот удалённый, живущий на другой машине в локальной сети.
...
Рейтинг: 0 / 0
Прибить COM объект
    #32758941
Стр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
попробуй явно через маршал (хотя ???)
Код: plaintext
1.
2.
3.
4.
5.
try
{
  if(_provider._dataSource!=null) Marshal.ReleaseComObject(_provider._dataSource);
  _provider._dataSource = null;
  _provider._dataSource = _provider._session.SelectData(selectName, address, recsOnly);
}
...
Рейтинг: 0 / 0
Прибить COM объект
    #32759106
VladiCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы наверняка, надо сначала

Marshal.ReleaseComObject(_provider._dataSource);

потом GC.Collect();

Но это довольно тяжелая операция для цикла.

а GC.SuppressFinalize - наоборот говорит Garbage Collector'у о том, что Finalize вызывать не надо.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Прибить COM объект
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]