Обработка события добавления объекта в базу чертежа ObjectAppended

Автор Тема: Обработка события добавления объекта в базу чертежа ObjectAppended  (Прочитано 5387 раз)

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

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Добрый вечер всем!
Нужно обработать событие добавление объекта в базу. С использованием транзакции! Но, ее похоже нельзя использовать в этот момент.
В чем причина? И как лучше обойти эту ситуацию?

Тестовый пример.
В команде подписываюсь на событие добавления объекта в базу, потом добавляю в модель точку. Срабатывает событие, и в некотором методе нужно сделать кое-что с использованием транзакции.
Извините, вам запрещён просмотр содержимого спойлеров.

Извините, вам запрещён просмотр содержимого спойлеров.

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

  • Administrator
  • *****
  • Сообщений: 13880
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
Попробуй эмуляцию транзакции.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Код - C# [Выбрать]
  1.             using (var t = db.TransactionManager.StartOpenCloseTransaction())
  2.             {
  3.                 var ent = entId.GetObject(OpenMode.ForRead);
  4.                 t.Commit();
  5.             }
Подскажите, как исправить открытие объекта в случает StartOpenCloseTransaction. Никогда ей не пользовался.

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82
Тестовая эмуляция транзакции.
Код - C# [Выбрать]
  1.         private void Db_ObjectAppended (object sender, ObjectEventArgs e)
  2.         {
  3.             using (var t = db.TransactionManager.StartOpenCloseTransaction())
  4.             {
  5.                 Do();
  6.                 t.Commit();
  7.             }
  8.         }
  9.  
  10.         /// <summary>
  11.         /// Некоторый метод обработки. Которому нужно использовать транзакцию.
  12.         /// </summary>
  13.         private void Do ()
  14.         {
  15.             var t = db.TransactionManager.TopTransaction;
  16.             // "eInProcessOfCommitting"
  17.             var ent = t.GetObject(entId,OpenMode.ForRead);
  18.         }
Ошибка eInProcessOfCommitting на 17 строке.

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

  • Administrator
  • *****
  • Сообщений: 13880
  • Карма: 1786
  • Рыцарь ObjectARX
  • Skype: rivilis
var t = db.TransactionManager.TopTransaction;
Это не пройдёт - только для обычной транзакции есть TopTransaction
Так что транзакцию (OpenCloseTransaction) тебе придётся явно передавать. Но лучше всего в ObjectAppended ничего не делать вообще - только собирать ObjectId добавленных объектов. А обработку вести в других событиях. Например, в CommandEnded.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ВильдарАвтор темы

  • ADN Club
  • ****
  • Сообщений: 409
  • Карма: 77
  • Skype: vildar82