Я пишу плагин AutoCAD. Я использую транзакцию для получения некоторых объектов, и у меня возник вопрос: мне нужно закрыть объекты (объекты), которые я получил через транзакцию?Закрытие объектов AutoCAD, которые были получены по транзакции
В документации указано, что когда метод Commit() называется транзакцией, закрывается каждый объект, полученный по транзакции.
void Commit() - Эта функция выполняет изменения, сделанные во всех DBO-объектах, открытых во время транзакции, а затем закрывает их.
Но что происходит, когда я не называю этот метод? Например, я использую транзакцию только для открытия объекта и получения его имени слоя. Что-то вроде следующего:
Database hostapp_workdb = HostApplicationServices.WorkingDatabase;
using (Application.DocumentManager.MdiActiveDocument.LockDocument())
using (Transaction transaction = hostapp_workdb.TransactionManager.StartTransaction())
{
Entity entity = transaction.GetObject(objectId, OpenMode.ForRead) as Entity;
if (entity != null)
layer = entity.Layer;
}
Как вы можете видеть, здесь я не называю Commit(). Что будет в этом случае? Будет ли объект закрыт или нет (поскольку транзакция используется, он должен быть удален, поэтому я предполагаю, что он должен закрыть все объекты, но я не нашел подтверждения в документации, так что это только мое предположение).
Может быть, мне нужно сделать так:
ObjectId objectId = new ObjectId();
string layer = string.Empty;
Database hostapp_workdb = HostApplicationServices.WorkingDatabase;
using (Application.DocumentManager.MdiActiveDocument.LockDocument())
using (Transaction transaction = hostapp_workdb.TransactionManager.StartTransaction())
{
using (Entity entity = transaction.GetObject(objectId, OpenMode.ForRead) as Entity)
{
if (entity != null)
layer = entity.Layer;
}
}
Ссылки на официальные источники поощряются.
спасибо.
Обычно вам не нужно распоряжаться каждым объектом. В вашем втором случае, если «entity» является «null», вы получите «Exception», когда вызывается «entity.Dispose». –
@ Сэрвеш Мишра нет, не буду. Я запустил этот код и даже если объект равен null - я не получу никакого исключения. –