eHadMultipleReaders. Причина?

Автор Тема: eHadMultipleReaders. Причина?  (Прочитано 12792 раз)

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

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 546
  • Карма: 119
Re: eHadMultipleReaders. Причина?
« Ответ #15 : 04-03-2021, 15:17:12 »
То есть я не могу в одной транзакции получить нужные мне объекты, а обработать в другой?
когда вызвал tr.Commit(); ты закрыл объекты.
Передавать между транзакциями нужно ObjectId. И вновь открывать объекты.

Отмечено как Решение Atomohod 19-03-2021, 21:48:38

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eHadMultipleReaders. Причина?
« Ответ #16 : 04-03-2021, 15:20:34 »
То есть я не могу в одной транзакции получить нужные мне объекты, а обработать в другой?
Нет.
Вроде бы вложенные транзакции не запрещены.
Здесь в коде нет вложенных транзакций. Здесь независимые транзакции.
Еще раз. За пределами транзакции нельзя использовать открытые в транзакции объекты.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eHadMultipleReaders. Причина?
« Ответ #17 : 04-03-2021, 15:45:17 »
когда вызвал tr.Commit(); ты закрыл объекты.
Если быть точным, то не только tr.Commit() закрывает объекты. Если не было бы tr.Commit(), то по деструктору tr (закрывающаяся скобка у using) было бы тоже закрытие объектов, только с откатом (аналог DBObject.Abort() вместо DBObject.Close()).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн AtomohodАвтор темы

  • ADN OPEN
  • ****
  • Сообщений: 453
  • Карма: 1
Re: eHadMultipleReaders. Причина?
« Ответ #18 : 04-03-2021, 20:07:10 »
Передавать между транзакциями нужно ObjectId. И вновь открывать объекты.
Так я же и возвращаю из метода коллекцию ObjectId - public static ObjectIdCollection GetObjects(Database db). Как еще их передать? Через List<ObjectId>?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eHadMultipleReaders. Причина?
« Ответ #19 : 04-03-2021, 20:13:23 »
Atomohod,
При вызове Selector.SelectEntityOnDesiredLayers ты передаешь коллекцию Entity, которые уже не валидные, так как транзакция, в которой они открыты, уже завершена. Что непонятно?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: eHadMultipleReaders. Причина?
« Ответ #20 : 04-03-2021, 20:16:23 »
Atomohod,
И не увлекайся var - в твоём коде не поймёшь где ObjectId, а где Entity. Тем более, что имена переменных как будто специально сбивают с толку.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение